我编写了一个程序,它产生了一些进程。
默认情况下,Visual Studio 不会调试新进程——只调试创建新进程的原始进程。
有没有办法在代码中自动将 Visual Studio 连接到创建时的进程?
我编写了一个程序,它产生了一些进程。
默认情况下,Visual Studio 不会调试新进程——只调试创建新进程的原始进程。
有没有办法在代码中自动将 Visual Studio 连接到创建时的进程?
来自:调试在 Visual Studio 中使用 CreateProcess 生成的进程
您可以在子进程的启动代码中的某处临时调用 DebugBreak()。这将导致 Windows 提示您是否要调试该进程。
编辑:
由于两个项目都在同一个解决方案中,因此配置 VS 进行多项目调试:(VS2010)在Solution Explorer
选择Set Startup Projects...
对话框中选择Multiple startup projects
单选按钮中的解决方案节点上下文单击
在项目网格中更改Action
您希望调试的所有项目到Start
这仍然提供提示,但确实附加了调试器:
if (!Debugger.IsAttached && DebuggerFlagSet()) Debugger.Launch();
然后在父进程中
if(Debugger.IsAttached)
SetDebuggerFlag()
您需要一种调试器标志的机制,例如磁盘/注册键/互斥锁等上的文件。
正在启动的调试器与初始实例不同。
为此,您必须编写一个 VS 插件或 VS 包,因为您需要坐在后台等待子进程加载。
这是您要执行的操作的一般方法:
uint processID = DTE.Debugger.CurrentProcess.ProcessID
)ManagementEventWatcher
中描述的新进程创建。您的查询应该是"SELECT ProcessID FROM Win32_ProcessStartTrace WHERE ParentProcessID = " + processID
DTE.Debugger.LocalProcesses
,然后调用.Attach()
它。