4

我编写了一个程序,它产生了一些进程。

默认情况下,Visual Studio 不会调试新进程——只调试创建新进程的原始进程。

有没有办法在代码中自动将 Visual Studio 连接到创建时的进程?

4

3 回答 3

3

来自:调试在 Visual Studio 中使用 CreateProcess 生成的进程

您可以在子进程的启动代码中的某处临时调用 DebugBreak()。这将导致 Windows 提示您是否要调试该进程。

编辑: 由于两个项目都在同一个解决方案中,因此配置 VS 进行多项目调试:(VS2010)在Solution Explorer
选择Set Startup Projects...
对话框中选择Multiple startup projects单选按钮中的解决方案节点上下文单击
在项目网格中更改Action您希望调试的所有项目到Start

于 2012-03-13T16:35:23.130 回答
2

这仍然提供提示,但确实附加了调试器:

if (!Debugger.IsAttached && DebuggerFlagSet()) Debugger.Launch();

然后在父进程中

if(Debugger.IsAttached)
    SetDebuggerFlag()

您需要一种调试器标志的机制,例如磁盘/注册键/互斥锁等上的文件。

正在启动的调试器与初始实例不同。

于 2012-03-13T16:46:07.087 回答
1

为此,您必须编写一个 VS 插件或 VS 包,因为您需要坐在后台等待子进程加载。

这是您要执行的操作的一般方法:

  1. 获取被调试进程的ID(即,uint processID = DTE.Debugger.CurrentProcess.ProcessID
  2. 添加对 System.Management 的引用并使用 a来侦听此线程ManagementEventWatcher中描述的新进程创建。您的查询应该是"SELECT ProcessID FROM Win32_ProcessStartTrace WHERE ParentProcessID = " + processID
  3. 当一个新的子进程加载时,通过它的 processID 找到它DTE.Debugger.LocalProcesses,然后调用.Attach()它。
于 2012-03-14T15:19:57.157 回答