【问题标题】:Can I spawn processes attached to a running debugger?我可以生成附加到正在运行的调试器的进程吗?
【发布时间】:2011-04-28 13:58:44
【问题描述】:
假设我有一个程序会产生一些进程(伪代码)
main() {
p1 = Spawn( "ClientProcess" );
WaitForEventFrom( p1 );
}
是否可以检测“main”是否附加到调试器,并自动将该调试器附加到客户端进程?
额外问题:可以在不更改源代码/可执行文件的情况下完成吗?
(注意:我在 Windows 上,使用 VS2010。但任何(体面的)调试器都可以)
【问题讨论】:
标签:
c++
windows
visual-studio
debugging
【解决方案1】:
您可以使用 IsDebuggerPresent() 来了解 main() 是否正在调试。
但是,您不能将 VS 调试器重定向到从已调试进程中取消附加并重新附加到生成的进程。
我能想象的最好的结果是产生一个新的 vs 实例,试图将它附加到客户端进程。生成 windbg 并将其附加到 ClientProcess 可能会更容易,因为那里有对 pid 等的命令行支持。
如果应用程序正在远程调试(CheckRemoteDebuggerPresent() 返回 true),这显然也不起作用,因为您需要从远程系统启动和附加。问题太多了……