我可以生成附加到正在运行的调试器的进程吗?

时间:2011-04-28 13:58:45

标签: c++ windows visual-studio debugging

想象一下,我有一个程序可以产生一些进程(伪代码)

main() {
   p1 = Spawn( "ClientProcess" );

   WaitForEventFrom( p1 );
}

是否可以检测'main'是否附加到调试器并自动将该调试器附加到客户端进程

奖金问题:可以在不更改源代码/可执行文件的情况下完成吗?

(注意:我在Windows上,使用VS2010。但任何(体面的)调试器都会这样做)

1 个答案:

答案 0 :(得分:1)

您可以使用IsDebuggerPresent()来了解main()是否正在调试。

但是,您无法重定向VS调试器以从已调试的进程中取消附加并重新附加到生成的进程。

我能想到的最好的事情是产生一个新的vs实例将其附加到客户端进程的实例。生成windbg并将其附加到ClientProcess可能更容易,因为pid的命令行支持就在那里。

如果远程调试应用程序(CheckRemoteDebuggerPresent()返回true),这显然也无效,因为您需要从远程系统启动和连接。那里的问题太多了......