Есть ли способ отслеживать только источник проекта в Delphi?

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

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

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

Есть ли параметр или инструмент где-нибудь, который может это сделать? Разрешить прослеживать код внутри проекта при бесшумном выполнении кода, который является внешним по отношению к проекту?

Ответ 1

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

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

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

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

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


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

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

Ответ 2

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

Ответ 3

Другим методом является использование информации об отладке и директиву компилятора локальной информации о символах - добавьте {$D-$L-} к началу каждого блока.

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