如何调试COM C++;进程外服务器?(客户端:Excel vba) 我不知道如何用Visual Studio 2015调试进程外服务器的COM ATL C++。

如何调试COM C++;进程外服务器?(客户端:Excel vba) 我不知道如何用Visual Studio 2015调试进程外服务器的COM ATL C++。,excel,com,atl,vba,Excel,Com,Atl,Vba,对于COM ATL DLL没有问题,在调用COM DLL时会自动触发断点。但是,当我尝试调试EXE服务器时,调试器没有中断。事实上,exe服务器仅在需要时加载,并且在客户端启动时未加载exe服务器的调试符号 我的客户机(称为COM服务器)是Excel VBA(我通过工具/引用在VBA编辑器中添加了对COM exe的引用)。要调试它,我在Visual Studio调试命令中将路径设置为Excel.exe,并将路径设置为xlsm文件的参数。然后我只调用Excel中的VBA代码。它适用于com DLL

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

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

我发现了这篇文章(),似乎这是由提升/权限问题引起的,但我尝试了建议的答案,但没有成功

有人能帮我吗

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


是否有必要将调试器附加到使用EXE服务器的客户端(在我的例子中是excel)?

调试EXE服务器很棘手

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

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

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\YourExeName.exe]
"debugger"="vsjitdebugger.exe"
将YourExeName.exe更改为更有用的内容

启动EXE服务器时,系统将提示您启动调试器或从当前运行的调试器实例附加。让调试器运行会更快更好。。。当我说“调试器”时,VisualStudio的一个正在运行的实例就可以了

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


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

完成调试后,我用这种方式做的一个技巧是转到注册表并在注册表项前面加下划线,如:\u YourExeName.exe。它有两个功能。。。1) 停止调试器提示,2)如果我想再次调试EXE,它更容易找到,因为它是图像文件执行选项键中列出的第一个,我可以删除下划线以这种方式返回调试。非常感谢Joe,问题解决了!你刚刚救了我一天:)网络上几乎没有关于它的任何信息,你的回答是,到目前为止,我读到的关于它的最好的信息:)也谢谢你的把戏。对于其他人:遵循此答案,只需跳过与“/RegServer”调用相对应的对调试器的第一次调用。只需构建COM服务器,跳过对JIT调试器的第一次调用,运行客户端,调试器就会在调用服务器时弹出。很好,+请注意超时问题