我写了一个程序,它产生了一些过程。
默认情况下,Visual Studio不会调试新进程 - 只会创建创建新进程的原始进程。
有没有办法在代码中自动将Visual Studio连接到创建它们的进程?
答案 0 :(得分:3)
来自:debugging a process spawned with CreateProcess in Visual Studio
你可以暂时调用DebugBreak()中的某个地方 您的子进程的启动代码。这将导致Windows提示 如果你想调试那个过程,你就可以了。
修改强>
由于两个项目都在同一个解决方案中,因此请为多项目调试配置VS:
(VS2010)
在上下文中单击Solution Explorer
中的解决方案节点
选择Set Startup Projects...
在对话框中选择Multiple startup projects
单选按钮
在项目网格中,将要调试的所有项目的Action
更改为Start
答案 1 :(得分:2)
这仍然提供了提示,但确实附加了调试器:
if (!Debugger.IsAttached && DebuggerFlagSet()) Debugger.Launch();
然后在父进程中
if(Debugger.IsAttached)
SetDebuggerFlag()
您需要一种调试器标志的机制,例如磁盘上的文件/ reg key / mutex等。
正在启动的调试器与初始实例不同。
答案 2 :(得分:1)
要执行此操作,您必须编写VS加载项或VS程序包,因为您需要坐在后台并等待子进程加载。
以下是您想要做的一般食谱:
uint processID = DTE.Debugger.CurrentProcess.ProcessID
)ManagementEventWatcher
监听this thread中所述的新流程创建。您的查询应为"SELECT ProcessID FROM Win32_ProcessStartTrace WHERE ParentProcessID = " + processID
DTE.Debugger.LocalProcesses
中按其进程ID查找,然后在其上调用.Attach()
。