我不知道如何使用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文件的内容:
[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语句可能会有所帮助。
严格来说,不必附加到客户端进程。有时这是有帮助的,有时却没有帮助。如果您拥有调用客户端进程的源代码,显然会容易得多。