如何调试进程外服务器的COM C ++? (客户端:Excel vba)

How to debug a COM C++ Out of Process Server ? (client: Excel vba)

我不知道如何使用Visual Studio 2015调试COM ATL C ++进程外exe服务器。

对于COM ATL DLL没问题,当我调用COM dll时会自动触发断点。但是,当我尝试调试EXE服务器时,调试器没有中断。确实,仅在需要时才加载exe服务器,并且在客户端启动时不加载exe服务器的调试符号。

我的客户端(称为COM服务器)是Excel VBA(我已经通过工具/参考在VBA编辑器中将对com exe的引用添加到了该文件夹中)。为了对其进行调试,我在Visual Studio Debug命令中将路径设置为Excel.exe,并作为参数将路径设置为xlsm文件。然后,我只是调用在Excel中调用VBA代码。它适用于com DLL,但不适用于COM Exe。我还尝试通过将VS附加到Excel上,但没有成功。

我发现了这篇文章(Windows COM-如何调试COM服务器),似乎这是由提升/权限问题引起的,但是我尝试了建议的答案,但是没有用。

有谁能帮助我吗?

您如何调试进程外的com服务器?

是否有必要将调试器附加到使用EXE服务器的客户端(因此以我为例)?


尝试调试EXE服务器非常棘手。

我要做的是修改注册表,以便在加载EXE时提示您调试。

这是用于修改注册表的导出的.reg文件的内容:

1
2
[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\YourExeName.exe]
"debugger"="vsjitdebugger.exe"

将YourExeName.exe更改为更有用的内容...

启动EXE服务器时,系统将提示您启动调试器或从调试器的当前运行实例进行附加。已经有一个调试器正在运行,这是更快,更好的方法。当我说" debugger"时,可以运行Visual Studio实例。

尝试调试EXE服务器时的一个问题是,当您设置断点并逐步执行代码时,您可能会超过COM超时,然后由于超时,调用您的进程的EXE客户端将失败,并且它将继续执行。当一切都在进行中时,这不是问题。对于EXE,在您认为可能存在问题的区域的调试版本中包含更多TRACE语句可能会有所帮助。

严格来说,不必附加到客户端进程。有时这是有帮助的,有时却没有帮助。如果您拥有调用客户端进程的源代码,显然会容易得多。