Как заставить компилятор 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
Я не включаю явно какие-либо файлы (помимо операторов using), и моя интерпретация файлов справки в директивах $ WARN и $ WARNINGS такова, что они не применяются за пределами области действия текущего модуля. В любом случае, в моем коде нет ни одной из этих директив. Могло ли быть причиной проблемы использованный модуль из сторонней библиотеки? - person Scott W; 15.06.2009
comment
У нас была эта проблема со сторонним кодом, где объем не был ограничен, как ожидалось. - person Francesca; 15.06.2009

Подсказки и предупреждения генерируются компилятором. Он будет сообщать только о единицах, которые он скомпилировал. Команда "compile" будет компилировать только те файлы, которые были изменены. Чтобы принудительно перекомпилировать все модули, используемые в вашем проекте, используйте вместо этого команду Build.

Более поздние версии назначают сочетание клавиш (Shift + F9) для команды «Сборка».

Чтобы получить это сочетание клавиш в 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
Это не совсем так, только если для dcc32 задан переключатель -B, что эквивалентно выполнению полной сборки в среде 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
Не повезло с регенерацией глубины резкости. Я не могу найти в своем проекте ни одного файла .dsm. - person Scott W; 15.06.2009