想象一下,我有一个程序可以产生一些进程(伪代码)
main() {
p1 = Spawn( "ClientProcess" );
WaitForEventFrom( p1 );
}
是否可以检测'main'是否附加到调试器并自动将该调试器附加到客户端进程?
奖金问题:可以在不更改源代码/可执行文件的情况下完成吗?
(注意:我在Windows上,使用VS2010。但任何(体面的)调试器都会这样做)
答案 0 :(得分:1)
您可以使用IsDebuggerPresent()来了解main()是否正在调试。
但是,您无法重定向VS调试器以从已调试的进程中取消附加并重新附加到生成的进程。
我能想到的最好的事情是产生一个新的vs实例将其附加到客户端进程的实例。生成windbg并将其附加到ClientProcess可能更容易,因为pid的命令行支持就在那里。
如果远程调试应用程序(CheckRemoteDebuggerPresent()返回true),这显然也无效,因为您需要从远程系统启动和连接。那里的问题太多了......