Как отлаживать Delphi IDE?

Каковы подробные инструкции по отладке IDE Delphi?

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

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

мотивация

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

4 ответа

Решение

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

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

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

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

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

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

Затем следуйте инструкциям, чтобы установить BDS.exe в качестве хост-приложения.

Я хотел бы добавить немного 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, например: выше, или вы даже можете просто установить точки останова без прерывания в delphi, отключить свойство точки останова "Break on exception" и вместо этого настроить "сообщение журнала". Эти сообщения (сообщения о точках останова) имеют преимущество, заключающееся в том, что они не требуют какого-либо ущерба для вашего компонента, чтобы добавить некоторые простые возможности типа "печать-оператор-отладка" в ваш инструментарий отладки.

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

Другие вопросы по тегам