如何调试在另一个进程(2.exe)下运行的进程(1.exe)?

问题描述:

的1.exe没有给予足够的时间让我启动IDE和附加的1.exe调试器打入。如何调试在另一个进程(2.exe)下运行的进程(1.exe)?

我假设你有源头的1.exe(如果你正在调试它),然后只需插入开头附近的语句,将导致它挂在足够长的时间来附加一个调试器。 (如果你绝望,这不是互动的getch()。)

在附着,就跳到下一个声明,让他走了。

你可以把一些预处理命令建立调试 - 只记得建立在释放模式的版本:

#ifdef DEBUG 
Thread.Sleep(10000); 
#endif 

我建议采取同样的做法与在这种情况下,NT服务。他们也将启动并且通常不会给您足够的时间来为启动例程附加调试器。

详细描述如下:http://www.debuginfo.com/articles/debugstartup.html

总之你添加第二EXE注册表项:

HKLM \ SOFTWARE \微软\的Windows NT \ CURRENTVERSION \图像文件执行 选项\ 2.exe调试= “C:\ progs的\ MSVS \ common7 \ IDE \ devenv.exe的 /debugexe”(REG_SZ)

更改c:\ progrs \ msms \以匹配您的设置。

希望有所帮助。

怎样的1.exe推出?如果您可以使用CreateProcess()启动它,则可以启动处于挂起状态的进程,附加调试器,然后释放新进程。

如果您愿意考虑使用Visual Studio以外的调试器,则WinDBG可以自动调试子进程(仅限本机代码)。

你没有提到你使用的是什么语言。但是,如果您使用C#或VB.NET,则可以添加Debug.Break()或Stop以触发提示将调试器附加到进程。

或者如上所述,只需使用类似Console.Readline()或MessageBox.Show()的东西来暂停进程的启动,直到您可以将调试器附加到它。