如何调试Delphi IDE?

时间:2012-03-10 04:56:44

标签: delphi debugging delphi-2005

有关如何调试Delphi IDE的详细步骤是什么?

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

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

动机

有一个VCL组件,我有源代码,可以构建,编译和安装。但是,当它放在项目中的表单上时,Delphi会在您关闭表单时挂起。所以,我想找出为什么Delphi在表单上使用此组件退出时冻结的原因。 (它在设计时挂起,当关闭项目时)。

4 个答案:

答案 0 :(得分:8)

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

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

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

答案 1 :(得分:2)

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

答案 2 :(得分: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中设置Non Breaking Breakpoints,并关闭断点属性“Break on exception”,而是设置“日志消息”。这些消息(断点消息)的好处是不需要对组件造成任何损害,以便为调试工具包添加一些简单的“print-statement-debug”功能。

答案 3 :(得分:1)

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