如何调试delphiide?

如何调试delphiide?,delphi,debugging,delphi-2005,Delphi,Debugging,Delphi 2005,关于如何调试DelphiIDE的详细步骤是什么 我从其他帖子中了解到,需要创建一个项目,并在项目的调试器设置中,将项目的“主机应用程序”设置为Delphi(C:\Program Files\Borland\BDS\3.0\Bin\BDS.exe)。然后,当项目在调试器中运行时(通过按F9键),应该会出现DelphiIDE的第二个实例 我已经成功地完成了上述步骤。然而,当我在调试器模式下运行项目时,我没有看到任何第二个DelphiIDE实例打开 动机 有一个组件,我有它的源代码,可以很好地构建、编

关于如何调试DelphiIDE的详细步骤是什么

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

我已经成功地完成了上述步骤。然而,当我在调试器模式下运行项目时,我没有看到任何第二个DelphiIDE实例打开

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

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

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


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

首先查找并打开组件包,将runtime和designtime包生成选项从Release转到Debug(如果尚未),然后重新生成

然后保存包含两个包项目的项目组(一个designtime和一个runtime,在某些特殊情况下,人们只有一个包,即designtime+runtime in one)

然后按照以下步骤将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;
析构函数:

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;
TMY组件所在单元的最终确定部分:

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

查看delphi调试器中的“输出事件”页面,您可以了解代码的运行情况,即使您没有获得可以用来相当准确地定位缺陷的异常断点,您也可以使用上述OutputDebugString消息,甚至可以在delphi中设置并关闭breakpoint属性“在异常时中断”,而是设置“日志消息”。这些消息(断点消息)的好处是不需要对组件造成任何损坏,以便添加一些简单的“打印语句调试”“类似于调试工具包的功能。

如果Delphi的第二个实例未启动,则您的bds.exe路径不正确。

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

调试是什么意思:看到另一个进程(第二个IDE)在调试器(第一个IDE)下运行,还是您确实想查找并删除某个bug?提问,因为问题和标题使它看起来像是要调试IDE本身!您当然可以看到它在您的调试器下运行,但是查找和删除bug是另一回事:您需要源代码,而您没有IDE的源代码!抱歉没有说清楚。有一个VCL组件,我有它的源代码,可以很好地构建、编译和安装。但是,当它被放置在项目的表单上时,Delphi会在您关闭表单时挂起。所以,我想知道为什么Delphi在退出时会冻结在表单上的这个组件上。我添加了您的澄清,作为对问题本身的编辑,因为每个人都会在这里寻找澄清。要求更多的澄清:你是说你有一个DPK作为唯一的活动项目,你把它的主机应用程序设置为DelphiIDE,点击运行,它不启动IDE?它还有别的作用吗?示例:它会给你一条错误消息吗?看看Raize的CodeSite之类的东西。添加代码站点。为组件操作的所有参数和输入输出发送行。有一个IDE实用程序可以帮助所有函数实现这一点。这将帮助您了解正在发生的事情以及原因。而且它不会干扰操作,比如弹出消息框等。很抱歉没有说得更清楚。有一个VCL组件,我有它的源代码,可以很好地构建、编译和安装。但是,当它被放置在项目的表单上时,Delphi会在您关闭表单时挂起。所以,我想知道为什么Delphi在退出时会冻结在表单上的这个组件上。谢谢Cosmin Prud。关于运行IDE的第二个副本,您的回答很有效。我现在可以看看这个组件的调试了。OP说这是关于一个“…一个VCL组件,我有它的源代码”。这似乎不是关于DPK的源代码缺失,除非你知道一些没有发布在这里的东西。很好。我的回答基本上与所需要的相反。修复。路径是正确的,因为我通过右键单击Delphi2005(bds.exe)快捷方式图标并复制它的目标位置来获得位置。如果我通过整个路径进入资源管理器窗口,Delphi2005也会启动。所以路径是正确的。挂起只发生在设计时,而不是运行时。如果我用一个表单创建一个简单的projet,将问题组件放在上面并运行pro