Delphi: как исключить модули из отладчика? - PullRequest
6 голосов
/ 05 ноября 2010

Иногда, когда я выполняю пошаговую отладку, непосредственно перед событием FormCreate или сразу после FromDestroy, отладчик начинает открывать модули DevExpress (cxContainer.pas, ...) и так до того, как FormCreate приводит меня к «F8»в cxContainer вместо того, чтобы переходить к следующей строке моего кода.

(это всего лишь пример, это может произойти, конечно, с любой сторонней библиотекой)

Как мне сказать отладчику "«отладить только мои модули» (только файлы pas, перечисленные в файле dpr?)

Конечно, иногда полезно отлаживать библиотеки, но в большинстве случаев это не так.

Ответы [ 4 ]

26 голосов
/ 05 ноября 2010

Вам лучше следовать соглашению VCL для сторонних компонентов:

  • Измените путь вывода DCU во всех сторонних пакетах на папку, отличную от папки, в которой хранятся файлы PAS.
  • Скомпилируйте каждый пакет один раз в режиме отладки и сохраните сгенерированные файлы DCU в папке (например, отладочные DCU).
  • Скомпилируйте каждый пакет еще раз, но на этот раз в режиме выпуска, и сохранитесгенерированные файлы DCU в папке (например, DCU выпуска).
  • Перейдите к параметрам Delphi и добавьте путь к DCU выпуска в «Путь к библиотеке».
  • В параметрах Delphi добавьте путь к исходным файламв «Путь просмотра».
  • В параметрах Delphi добавьте путь отладки DCU к «Отладка пути DCU».

Таким образом, Delphi увидит только выпуск DCU этой третьей -Компонент party при компиляции проекта, поэтому отладчик не может войти в исходный код.С другой стороны, поскольку исходный путь включен в «Путь просмотра», вы все равно можете перейти к исходному коду внутри IDE, нажав Ctrl + щелчок по имени модуля или что-нибудь определенное в этих элементах.

Если вы хотитечтобы отладить компонент, вы можете перейти к «Project | Options | Delphi Compiler | Compiling» и включить «Use debug .dcus».Это заставит компилятор использовать «путь отладки DCU» вместо «пути к библиотеке».

VCL работает так же, как правило, вы не входите в исходный код VCL при отладке проекта, но если вы включаете«Используйте debug .dcus», вы также можете отлаживать исходный код VCL.

JVCL также организует свои пакеты и исходный код таким же образом.

EDIT : Если вы возьмете этоподход и хотите, чтобы просмотр кода работал (Ctrl + Click);обратите внимание, что когда вы компилируете версию выпуска пакетов, вы должны установить символьную справочную информацию в «Project | Options | Delphi Compiler | Compiling» на «Reference Info»;в противном случае Ctrl + Click не будет работать для этих юнитов.По умолчанию в конфигурации выпуска сборки для справочной информации о символах установлено значение Нет.

2 голосов
/ 18 сентября 2014

Быстрое и простое решение - отключить переключатель DEBUG ({$ D-}) для любых библиотек, которые вы используете.Многие библиотеки (включая DevExpress) используют глобальный включаемый файл, обычно вверху каждого исходного файла или прямо над или под оператором «unit» (например, unit cxContainer; интерфейс {$ I cxVer.inc}).Откройте этот включаемый файл (нажмите на него и нажмите CTRL-Enter), добавьте {$ D-} справа вверху и закомментируйте все существующие {$ D +}.

2 голосов
/ 05 ноября 2010

Есть только один способ сказать компилятору не отлаживать модуль: скомпилировать его без отладочной информации.

Если у вас есть источник для ваших библиотек, вы можете пересобрать их пакет после отключения "включить отладочную информацию "опция компилятора для каждого пакета в библиотеке.Если вам повезет, ваши библиотеки будут включать в себя файл .inc, в котором указаны необходимые параметры компилятора и которые они включают в каждый модуль.В этом случае все, что вам нужно сделать, это отредактировать этот inc-файл и пересобрать все пакеты.

Если у вас нет источника для ваших библиотек, создатели библиотек могут предоставить два набора dcu: один скомпилирован сОстальное без отладочной информации.В этом случае просто укажите путь к библиотеке, который вам нужен.

1 голос
/ 05 ноября 2010

Отключить отладочную информацию в единицах, в которые вы не хотите, чтобы отладчик входил.

...