Как отладить Delphi IDE?

Каковы подробные шаги по отладке среды разработки Delphi?

Я понимаю, из других сообщений, что нужно создать проект, а в настройках отладчика проекта установить "хост-приложение" проекта в Delphi (C:\Program Files\Borland\BDS\3.0\Bin\bds.exe). Затем, когда проект запускается в отладчике (нажав клавишу F9), должен появиться второй экземпляр среды Delphi.

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

Мотивация

Существует компонент VCL, для которого у меня есть исходный код, который строит, компилирует и устанавливает отлично. Но, когда он помещается в форму в проекте, Delphi зависает, когда вы закрываете форму. Итак, я хочу узнать, почему Delphi замерзает при выходе с этим компонентом в форме. (Он зависает во время разработки при закрытии проекта).

Ответ 1

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

Используемая вами техника обычно используется для отладки проектов пакета времени разработки. Создайте проект пакета времени разработки, установите его в среду IDE, установите приложение-хозяин проекта как IDE, установите некоторые точки останова, нажмите F9, и начнется вторая копия Delphi.

Вы также можете "отлаживать" среду разработки Delphi, вручную запустив вторую копию, а затем с помощью команды "Прикрепить к процессу" из меню "Выполнить", но это не будет очень полезно, поскольку вы не можете легко найдите свой код, чтобы установить точку останова.

Ответ 2

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

Ответ 3

Сначала найдите и откройте пакеты компонентов, измените параметры сборки пакета времени исполнения и времени разработки от Release to Debug, если они еще не созданы, и перестройте.

Затем сохраните группу проектов, содержащую как проекты пакета (одно время разработки, так и одно время выполнения, в некоторых исключительных случаях у людей есть только один пакет, в котором время разработки + время выполнения).

Затем выполните шаги, чтобы установить BDS.exe в качестве Host Application.

У меня возникнет соблазн добавить несколько сообщений OutputDebugString к компоненту, который, как вы знаете, сломан:

Конструктор:

constructor TMyComponent.Create(AOwner:TComponent);
begin
    inherited;
    // other stuff.
    OutputDebugString('Created TMyComponent');
end;

Деструктор:

destructor TMyComponent.Destroy(AOwner:TComponent);
begin
    OutputDebugString('Destructor TMyComponent starts');
    inherited;
    // other stuff.
    OutputDebugString('Destructor TMyComponent finish');
end;

Раздел финализации устройства, в котором находится TMyComponent:

 finalization
      OutputDebugString('Finalization section for Unit MyComponentUnit');
 end.

Рассматривая страницу выходных событий в отладчике delphi, вы можете выяснить, как далеко продвинулся код, и даже если вы не получите контрольную точку исключения, которую вы можете использовать, чтобы найти дефект достаточно точно, вы можете использовать либо OutputDebugString, как и выше, или вы даже можете просто установить Non Breaking Breakpoints в delphi и отключить свойство breakpoint "Break on exception" и вместо этого настройте "сообщение журнала". Эти сообщения (сообщения точки останова) имеют преимущество, не требуя какого-либо ущерба вашему компоненту, чтобы добавить некоторые простые функции "print-statement-debug" в ваш набор инструментов для отладки.

Ответ 4

Если второй экземпляр Delphi не запускается, значит, вы неправильно указали путь к bds.exe.