我写了一个程序,产生了一些进程。由另一个产生的调试进程
默认情况下,Visual Studio不会调试新进程 - 只有创建新进程的原始进程。
有没有办法在代码中自动将Visual Studio连接到创建时的进程?
我写了一个程序,产生了一些进程。由另一个产生的调试进程
默认情况下,Visual Studio不会调试新进程 - 只有创建新进程的原始进程。
有没有办法在代码中自动将Visual Studio连接到创建时的进程?
为此,您必须编写VS加载项或VS包,因为您需要坐在后台并等待子进程加载。
这里是你想做的事一般配方:
uint processID = DTE.Debugger.CurrentProcess.ProcessID
)ManagementEventWatcher
听用于在this thread中描述的新工艺创建。你的查询应该是"SELECT ProcessID FROM Win32_ProcessStartTrace WHERE ParentProcessID = " + processID
DTE.Debugger.LocalProcesses
,然后调用.Attach()
就可以了。来源:debugging a process spawned with CreateProcess in Visual Studio
您可暂时将在调用的DebugBreak()某处你的子进程的 启动代码。如果您想调试该进程,这将导致Windows提示 。
编辑: 由于这两个项目都在同一个解决方案,为多项目的调试配置VS: (VS2010) 语境单击Solution Explorer
解决方案节点选择Set Startup Projects...
在对话框选择Multiple startup projects
单选按钮
在项目网格中将所有希望调试的项目更改为Action
Start
我不想临时做点什么;在我的父进程中,我想检查它是否正在调试并自动附加调试器。 – 2012-03-13 16:39:14
那么这个答案可以解决它从孩子方面..但'临时'是关于你是否删除代码或完全取决于你。 – 2012-03-13 16:43:30
即使使用弹出窗口,它将成为第二个调试器,而不是主调试器实例。 – 2012-03-13 16:53:39
这仍然提供了一个提示,但不附加调试:
if (!Debugger.IsAttached && DebuggerFlagSet()) Debugger.Launch();
,然后在父进程
if(Debugger.IsAttached)
SetDebuggerFlag()
你需要为调试标志的机制,如磁盘上的文件/ reg键/互斥等。
正在启动的调试器将不会与初始实例相同。
既然你要求的VS选项,我只是要提到这是一个评论。 WinDbg + SOS允许您自动附加到子进程。 – 2012-03-13 16:50:04
第二个过程是同一个解决方案中的项目吗? – 2012-03-13 16:55:52
@Boo是的,它是。 – 2012-03-13 20:19:25