如何调试在 ASP 页中创建的 Visual Studio 6.0 中的 COM 对象?

Posted

技术标签:

【中文标题】如何调试在 ASP 页中创建的 Visual Studio 6.0 中的 COM 对象?【英文标题】:How to debug COM object in Visual Studio 6.0 that is created in an ASP page? 【发布时间】:2008-12-16 01:23:10 【问题描述】:

我有一个旧的 C++ COM 组件,它必须保持 Visual Studio 6.0 格式。我一辈子都想不出如何调试实际 COM 组件中的代码。

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

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

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

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

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

【讨论】:

以上是关于如何调试在 ASP 页中创建的 Visual Studio 6.0 中的 COM 对象?的主要内容,如果未能解决你的问题,请参考以下文章

安装在 Visual Studio 中创建的 Windows 服务

在包含 make 文件的 Linux 中创建的 Visual Studio 2015 中编译 C++ 项目

如何在 Visual Studio 2017 的 ASP.NET MVC 中创建自定义生成/脚手架模板(Razor)?

如何删除在 AWS Elastic Beanstalk 中创建的 CNAME 映射

如何在 Visual Studio 2015 asp.net 5 中调试 Typescript?

在 asp.net 中创建静态对象列表