Как да принудите компилатора на Delphi да показва всички съвети и предупреждения

Има ли начин да принудите компилатора на Delphi да показва всички съвети и предупреждения през цялото време?

Ето поведението, което в момента виждам в Delphi 6:

  1. Вижте прясно копие на моето приложение от контрол на източника
  2. Отворете проекта в Delphi и компилирайте
  3. Показват се всички съвети и предупреждения за проекта
  4. Направете промяна в една единица
  5. Компилирайте
  6. Показват се само съветите и предупрежденията за променената единица

И така, помислих си, че може би мога да измамя Delphi, като изтрия всички dcu файлове, за да го принудя да прекомпилира всичко. Без късмет. Компилаторът всъщност прекомпилира всички единици, но не показва подсказките и предупрежденията за тези единици.

РЕДАКТИРАНЕ: Извършването на пълно изграждане (Проект > Изграждане) води до същите неблагоприятни резултати.

НОВА ИНФОРМАЦИЯ: Ако модифицирам единица и след това компилирам, получавам предупрежденията. Ако обаче модифицирам единица и след това изградя, не получавам предупрежденията. Мисля, че това показва, че предупрежденията са изключени някъде. Вероятно в библиотека на трета страна?

Изглежда, че трябва да има начин да поискам от Delphi да покаже отново всички тези съвети и предупреждения, който не изисква от мен нито да проверя ново копие от контрола на източника, нито да променя всяка единица една по една.


person Scott W    schedule 10.06.2009    source източник
comment
Delphi 1 или Delphi 2009, или нещо между тях? Би било полезно да знаете...   -  person Roddy    schedule 11.06.2009


Отговори (5)


Бих проверил дали сте изключили предупрежденията в някои от вашите единици.
В зависимост от последната промяна в единиците, редът на компилиране може да се промени. В някои случаи предупрежденията могат да останат дезактивирани за модул, който е компилиран след известно време, когато току-що е изваден от контрола на версиите, той е бил компилиран преди, с предупрежденията.
Обърнете допълнително внимание на всеки Include файл, който може да използвате.

person Francesca    schedule 11.06.2009
comment
Не включвам изрично никакви файлове (отвъд операторите uses) и моето тълкуване на помощните файлове на директивите $WARN и $WARNINGS е, че те не се прилагат извън обхвата на текущата единица. Във всеки случай нямам нито една от тези директиви в моя код. Възможно ли е използвана единица от библиотека на трета страна да причини проблема? - person Scott W; 15.06.2009
comment
Имахме този проблем с код на трета страна, където обхватът не беше ограничен според очакванията. - person Francesca; 15.06.2009

Подсказките и предупрежденията се генерират от компилатора. Той ще докладва само за единици, които е компилирал. Командата "compile" ще компилира само файлове, които са променени. За да принудите повторно компилиране на всички единици, използвани от вашия проект, използвайте вместо това командата Build.

По-късните версии присвояват клавиш за бърз достъп (Shift+F9) към командата "Build".

За да получите тази клавишна комбинация в Delphi 6, инсталирайте тази помощна програма, която използвах за известно време с голям успех на Delphi 5.

person JosephStyons    schedule 10.06.2009
comment
Извършването на пълно компилиране дава точно същите резултати като компилирането. - person Scott W; 11.06.2009
comment
Какво се случва, ако ръчно изтриете всички .DCU файлове и след това направите пълно компилиране? - person JosephStyons; 11.06.2009
comment
Страхувам се, че резултатът все още е същият. - person Scott W; 11.06.2009
comment
Но ако затворите IDE, след това го отворите отново и направите пълно компилиране... получавате всички подсказки и предупреждения (първия път).. нали? - person JosephStyons; 11.06.2009
comment
Опитайте да преименувате вашия .DOF файл на нещо друго като MyProject.dof.OLD... оставете IDE да го създаде отново. Какво се случва тогава? - person JosephStyons; 11.06.2009
comment
Съжаляваме, затварям IDE, изтривам всички DCU и след това отварям отново: същият резултат; Оставяне на IDE да пресъздаде DOF файла: същият резултат; Оставяне на IDE да пресъздаде DRC и RES файловете: същият резултат - person Scott W; 11.06.2009
comment
Тогава това е много странно. Пълното изграждане трябва да генерира всички съвети и предупреждения. Звучи сякаш имаш проблем. (Delphi 6 имаше доста голям брой от тях, така че не съм изненадан.) - person Mason Wheeler; 11.06.2009
comment
Извършването на пълно компилиране определено /не/ трябва да върне същите резултати като второ компилиране. Подозирам, че не компилираш кода, който мислиш, че компилираш. Бих проверил пътищата ви, за да съм напълно сигурен, че кодът, който смятате, че компилира, наистина се компилира. - person Nick Hodges; 11.06.2009
comment
Изтриването на dcu трябва да накара всички единици да бъдат прекомпилирани от линкера. Това е доста странно. Според моя опит IDE проследява промените в кода и компилира само променените единици. Ако единица няма компилиран файл при търсене на проект, пътят(ите) трябва да бъде компилиран. Така че, когато изтриете всички DCU, вие възстановявате всички. - person user114285; 11.06.2009
comment
Аз също имам същия опит: Правенето на пълно изграждане на проекта определено не показва всички предупреждения във всички модули. Така беше поне в Delphi 2006 и 2007. Освен RTL всичко се компилира от източника, така че единствените dcus са в пътя за търсене на RTL и изходния път на dcu (което не е същото като пътя на източника). - person dummzeuch; 11.06.2009
comment
Какво ще кажете за това... опитайте да преименувате един от SOURCE файловете, които смятате, че компилирате... Това причинява ли компилирането да се провали? Какво ще кажете за конструкцията? Трябва... но ако не стане, значи компилираш нещо друго. - person JosephStyons; 11.06.2009
comment
Да, преименуването на изходен файл (особено на такъв, който има предупреждения, които трябва да се показват) води до неуспех на компилирането и компилацията с грешки Файлът не е намерен. - person Scott W; 15.06.2009
comment
Опитайте Ctrl+O два пъти, за да поставите принудително всички предупреждения във вашия код. След това направете изграждане. Какво става? - person JosephStyons; 15.06.2009
comment
CTRL+O, CTRL+O не помогна. Но добавянето на {$WARNINGS ON} в горната част на един от модулите, който има предупреждения, свърши работа. Така че сега всичко, което трябва да направя, е да разбера кой от моите компоненти на трета страна се държи зле, тъй като не използвам директивата {$WARNINGS} никъде в собствения си код. Благодаря за цялата ви помощ. - person Scott W; 16.06.2009

Имах същия проблем и най-накрая намерих решение... Търсете низове $WARNINGS OFF и $HINTS OFF, и то не само от *.pas файлове, но и от всички файлове. Имах тази странна идея в .inc файл на трета страна:

{$IFDEF DEBUG} {$WARNINGS ON} {$HINTS ON} {$ELSE} {$WARNINGS OFF} {$HINTS OFF} {$ENDIF}

person triip    schedule 27.07.2010
comment
Бих се опитал да избегна всякакви бъдещи компоненти от всеки, който направи нещо подобно. - person Loren Pechtel; 28.07.2010

Ако използвате dcc32.exe, винаги ще се показват всички предупреждения. (Това е още една причина, поради която използвам скриптове за изграждане за всичките си проекти.)

person mjn    schedule 10.06.2009
comment
Това не е напълно вярно, само когато ключът -B е даден на dcc32, което е еквивалентно на извършване на пълно изграждане в IDE. Без този ключ dcc32 по подразбиране също прави инкрементални компилации. И предупрежденията ще се показват само за единици, които се компилират, очевидно. - person mghie; 11.06.2009
comment
Прав си, -B е задължително. За някои проекти започвам с копиране на източниците в празна целева структура на директория, само в този случай -B не е необходимо. - person mjn; 11.06.2009

Все още използвам D6 за някои проекти и ако направя пълно изграждане, всички съвети и предупреждения се показват/показват отново. За проверка на синтаксиса или компилиране се показват само съобщения за променени единици.

Имате нещо друго нередно или повредено някъде. Опитайте да изтриете проекта .dsm и .dof файловете (те ще бъдат възстановени). .dof файлът съдържа флаговете за предупреждения и подсказки.

person Despatcher    schedule 11.06.2009
comment
Няма късмет с регенерирането на DOF. Не мога да намеря никакъв .dsm файл в моя проект. - person Scott W; 15.06.2009