1

我有一个旧的 C++ COM 组件,它必须保持 Visual Studio 6.0 格式。我一生都无法弄清楚如何在实际的 COM 组件中调试代码。

我能够在调试模式下构建它,添加断点并将其附加到 dllhost.exe 进程,但 Visual Studio 环境只会显示来自 dllhost.exe 而不是我的源代码的反汇编(它也不会停止在断点上)。

我记得不久前有一种方法可以使 IIS(或 inetinfo.exe)成为您的调试操作的目标(即当 Visual Studio 6.0 要求您提供可执行文件以启动您的 dll 时),并且 IIS 将以单进程模式运行。您需要更改一个注册表项,但谷歌搜索没有帮助。

4

2 回答 2

2

如果是基于 VB6 的 COM 组件,可以在 VB6 中打开项目并运行(不能运行 DLL 项目)。项目属性有一些选项,可以要求它运行,以便它运行并自行注册。

现在,尝试点击调用 COM 组件的 ASP 页面。类文件中设置的断点将被命中,因为调用是从 ASP 页面进行的。

于 2008-12-16T02:25:55.743 回答
0

首先,PDB文件(编译时产生的)应该和DLL在同一目录下(可以在项目属性中设置)。

如果您的对象不使用某些特定于 ASP 的功能(请求、响应、会话对象),您可以将其调用代码复制到 .vbs 文件并通过将cscript.exe your.vbs设置为调试目标程序进行调试。

有解释(例如)如何调试 ISAPI DLL - 它们也适用于您的 COM 对象(从操作系统/调试器的角度来看,它们都是加载到 IIS 进程中的 DLL)。注意你的 IIS 版本和进程内/进程外的东西。

最后,如果没有其他帮助,您可以通过OutputDebugString函数添加一些日志记录,并在免费的DebugView程序中查看它。

于 2008-12-16T06:17:44.370 回答