除了在Visual Studio 2017中启动之外,如何将调试器附加到其他进程?

时间:2018-08-16 14:20:58

标签: c# visual-studio debugging dll com

我必须处理的架构非常复杂: 一个本机C ++ Windows服务创建一个进程外COM对象(本机C ++,上下文为CLSCTX_LOCAL_SERVER的CoCreateInstance),该对象动态加载(AfxLoadLibrary)我的C#DLL。

当我单击Debug-> Start Debugging时,我想调试DLL。

我知道,当我使用Debug-> Attach to process附加到COM对象进程时,可以对其进行调试,并且如果需要调试启动程序,则可以在DLL代码中使用System.Diagnostics.Debugger.Launch(),但是这些选项都不能自动运行

我还尝试了以下技术:https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/a329t4ed(v=vs.100),但是COM进程以SYSTEM用户身份运行,因此我无法选择将现有的Visual Studio Solution与C#项目一起用作调试器,只能启动一个新实例。仅加载了EXE。

我也尝试过“启动外部程序”,但是我需要启动的是不是我要调试的进程的服务,因为我的DLL在另一个进程(COM-one)中运行。因此,一旦启动服务,调试就会停止(因为我使用脚本运行它,也许是个问题)。

1 个答案:

答案 0 :(得分:1)

我看不到使用标准Visual Studio功能完全将其自动化的选项。因此,我建议您编写一个简单的 Visual Studio扩展。只需使用模板,然后在菜单或某些自定义窗口中添加一个按钮,单击该按钮即可:

  • 遍历正在运行的进程,并等待直到在命令行上出现带有COM类guid的dllhost.exe实例
  • 找到进程后,请使用Process2 interface(可以使用VB中的代码)将其附加到该进程中

我不确定是否有帮助,但是您可以检查一下我简单的VS extension。我前一段时间写给configure symbols in the debugger