Как отлаживать 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.