Есть ли способ отследить только исходный код проекта в Delphi? - PullRequest
11 голосов
/ 05 мая 2010

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

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

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

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

Ответы [ 3 ]

12 голосов
/ 05 мая 2010

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

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

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

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

Когда вы настраиваете две разные версии, вы позволяете себе выбирать, хотите ли вы войти в код библиотеки. Просто переключите «использовать отладочные DCU» в настройках вашего проекта. Delphi автоматически добавит и удалит папку debug-version из пути поиска при переключении этого параметра.


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

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

4 голосов
/ 05 мая 2010

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

3 голосов
/ 05 мая 2010

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

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

...