Существует ли способ проследить только через источник проекта в Delphi?

Я использую Delphi 2010, и я задаюсь вопросом, существует ли способ проследить через код, который находится в проекте, не прослеживая через вызовы до включенного VCLs.

Например - Вы вставляете точку останова и затем используете Shift+F7 для трассировки через линию за линией. Теперь Вы сталкиваетесь с вызовом к некоторой длинной процедуре в VCL - в моем случае, это часто - Измерительный Studio или другой компонент, который тянет безделушки для набора ввода-вывода, OPC или других битов. Во всяком случае, что происходит, то, что транзитные участки отладчика из активного исходного файла, открывает источник компонента и прослеживает через это линию за линией. Часто это - сотни или тысячи строк кода, о которых я не забочусь - я просто хочу иметь его, выполняются и возвращаются к следующей исходной строке в МОЕМ проекте.

Очевидно, можно сделать это путем установки точек останова вокруг каждого экземпляра внешнего вызова, но часто существуют слишком многие для создания этого практичным - я провел бы час, устанавливая сто точек останова каждый раз, когда я хотел ступить через раздел кода.

Существует ли установка или инструмент где-нибудь, который может сделать это? Позвольте прослеживать через код в рамках проекта при тихом выполнении кода, который является внешним к проекту?

11
задан Paul Roub 28 August 2015 в 13:38
поделиться

3 ответа

Отладчик не будет просматривать блоки, не содержащие отладочной информации, поэтому цель состоит в том, чтобы заставить компилятор опустить отладочную информацию из блоков, которые вас не интересуют.

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

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

Чтобы сделать это действительно правильно, вы можете поступить так же, как VCL, и скомпилировать две разные версии ваших библиотек. Скомпилируйте одну с отладочной информацией, а другую без нее, и поместите скомпилированные файлы в разные каталоги. Добавьте каталог с отладочными версиями в конфигурацию Delphi; там уже должна быть папка, содержащая DCU отладки, предоставляемые Delphi.

Когда вы устанавливаете две разные версии, вы позволяете себе выбирать, хотите ли вы войти в код библиотеки. Просто переключите опцию "use debug DCUs" в настройках проекта. Delphi будет автоматически добавлять и удалять папку отладочной версии из пути поиска, когда вы переключите эту настройку.


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

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

12
ответ дан 3 December 2019 в 06:20
поделиться

Просто чтобы дополнить ваши варианты: если ваши библиотеки по какой-то причине должны быть скомпилированы с отладочной информацией (я обычно использую все с отладочной информацией, включая VCL и RTL.), И вы случайно отслеживаете метод, который вам не интересен, вы можете использовать Shift + F8 для запуска, пока метод не вернется к вашему коду.

4
ответ дан 3 December 2019 в 06:20
поделиться

Другой метод заключается в использовании директив компилятора debug information и Local symbol information - добавьте {$D-$L-} в начало каждого блока.

Это ВСЕГДА будет подавлять генерацию отладочной информации для данного блока. Если вам необходимо проследить в коде, закомментируйте директивы.

3
ответ дан 3 December 2019 в 06:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: