12

调试Delphi IDE的详细步骤是什么?

我从其他帖子中了解到,需要创建一个项目,并在项目的调试器设置中,将项目的“宿主应用程序”设置为 Delphi ( C:\Program Files\Borland\BDS\3.0\Bin\bds.exe)。然后,当项目在调试器中运行时(通过F9按键),应该会出现 Delphi IDE 的第二个实例。

我已经成功完成了上述步骤。但是,当我在调试器模式下运行项目时,我看不到任何 Delphi IDE 打开的第二个实例。

动机

有一个VCL组件,我确实有它的源代码,可以很好地构建、编译和安装。但是,当它被放置在项目中的窗体上时,当您关闭窗体时,Delphi 会挂起。所以,我想找出为什么 Delphi 在退出时冻结了表单上的这个组件。(它在设计时挂起,在关闭项目时)。

4

4 回答 4

10

您的项目很可能是 EXE 类型的。EXE 类型的项目不需要宿主应用程序,因此忽略该设置,不启动其他 IDE。至少,您应该使您的项目成为 DLL 类型:这将启动第二个 IDE,但这不会很有帮助。

您提到的技术通常用于调试您的设计时包项目。创建一个设计时打包项目,将其安装到 IDE 中,将项目的宿主应用程序设置为 IDE,设置一些断点,点击F9并启动 Delphi 的第二个副本。

您还可以通过自己手动启动第二个副本然后使用“运行”菜单中的“附加到进程”命令来“调试”Delphi IDE,但这不会很有用,因为您无法轻松找到您的代码设置断点。

于 2012-03-10T05:39:15.987 回答
2

我会首先检查挂起是否发生在运行时和设计时。在运行时代码中动态实例化组件。如果挂起仍然发生,那么您可以使用单个调试器实例正常单步执行组件的源代码。您不需要调试到正在运行的 IDE 实例,除非该行为仅发生在 IDE 进程中。

于 2012-03-11T00:27:07.017 回答
1

首先找到并打开组件包,将运行时和设计时包构建选项从 Release 转到 Debug,如果它们还没有,然后重新构建。

然后保存一个包含两个包项目的项目组(一个设计时和一个运行时,在某些特殊情况下,人们只有一个包,即设计时+运行时合二为一)。

然后按照步骤将 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中设置非中断断点,并关闭断点属性“异常中断”,而是设置“日志消息”。这些消息(断点消息)的好处是不需要对您的组件造成任何损坏,以便为您的调试工具包添加一些简单的“打印语句调试”之类的功能。

于 2012-03-10T16:42:11.300 回答
1

如果 Delphi 的第二个实例没有启动,那么您的 bds.exe 路径不正确。

于 2012-03-10T23:53:03.737 回答