如何调试 Delphi 中通常从 MSC 应用程序获取 运行 的 Com+ DLL

How to debug Com+ DLL in Delphi that normally gets run from MSC application

虽然我有多年 Delphi 的经验,但这是我第一次接触 Com+。我的客户有一个我必须维护的 Com+ 应用程序。在最终用户世界中,DLL 由 MSC(Microsoft 通用控制台文档)应用程序获取 运行。如何调试此 DLL?我已将调试器选项下的主机应用程序设置为 C:\WINDOWS\SYSTEM32\DLLHOST.EXE,并将参数设置为 /ProcessID:{Application ID from Component Services}。 DLL 运行s 但它没有给我任何 exposure/access DLL 的 GUI 方面。我所有的断点也设置为绿色(无法访问)。

您是否在组件服务的 local 配置中找到了这个 'Application ID from Component Services'?如果这样做,请保持组件服务视图打开,并切换到显示当前进程的备用报告视图。在启动调试器(以及将连接到 COM+ 管理的 DLLHOST.EXE 之前)之前,您的组件应该没有 运行 进程。只有这样,当对组件的对象发出第一个 COM+ 请求时,调试器才会看到 DLL 已加载并能够捕获异常和断点。

最后,这解决了我的问题: 在 Project -> Options -> Delphi Compiler -> Compiling 下:将 Optimization 更改为 FALSE,将 Stack frames 更改为 TRUE

在项目 -> 选项 -> Delphi 编译器 -> 链接:将包含远程调试符号设置为 TRUE。

运行 -> 参数必须如下所示:

ProcessID 是您的 COM+ 应用程序在组件服务中的应用程序 ID(右键单击您的 COM+ 应用程序和 select 属性):

记得在完成所有更改后重建并注册您的 DLL。