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

时间:2008-09-16 19:02:31

标签: visual-studio debugging

1.exe没有给我足够的时间来启动IDE并将1.exe附加到调试器以进入。

6 个答案:

答案 0 :(得分:6)

在这种情况下,我建议采用与NT服务相同的方法。它们也将启动,通常不会给你足够的时间来为启动例程附加调试器。

此处描述了详细信息:http://www.debuginfo.com/articles/debugstartup.html

简而言之,您为第二个exe添加了一个注册表项:

  

HKLM \ SOFTWARE \微软\的Windows   NT \ CurrentVersion \图像文件执行   Options \ 2.exe Debugger =   “C:\ progs的\ MSVS \ common7 \ IDE \ devenv.exe的   / debugexe“(REG_SZ)

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

希望有所帮助。

答案 1 :(得分:0)

我假设您拥有1.exe的源代码(如果您正在调试它),那么只需在开头附近插入一条语句,这将使其挂起足够长的时间来附加调试器。 (getch(),如果你是绝望的,而且它不是互动的。)

在附加之后,只需跳到下一个语句就可以了。

答案 2 :(得分:0)

您可以为调试版本添加一些预处理器命令 - 只需记住在发布模式下构建版本:

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

答案 3 :(得分:0)

如何启动1.exe?如果可以使用CreateProcess()启动它,则可以在挂起状态下启动进程,附加调试器,然后释放新进程。

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

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