如何调试 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。
虽然我有多年 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。