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

时间:2020-03-05 18:56:52  来源:igfitidea点击:

1.exe没有足够的时间让我启动IDE并将1.exe添加到调试器以进行入侵。

解决方案

回答

我假设我们有1.exe的源代码(如果我们要调试它),那么只需在开始处插入一条语句,这将使其挂起足够长的时间以连接调试器。 (getch()如果我们不顾一切,并且它不是交互式的。)

添加后,只需跳到下一条语句并放手即可。

回答

我们可以输入一些用于调试构建的预处理器命令,只记得以发布模式构建发布:

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

回答

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

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

简而言之,我们可以为第二个exe添加一个注册表项:

HKLM\Software\Microsoft\Windows
  NT\CurrentVersion\Image File Execution
  Options.exe   Debugger =
  "c:\progs\msvs\common7\ide\devenv.exe
  /debugexe" (REG_SZ)

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

希望能有所帮助。

回答

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

回答

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

回答

我们没有提及正在使用的语言。但是,如果使用Cor VB.NET,则可以添加Debug.Break()或者Stop来触发将调试器添加到进程的提示。

或者如上所述,只要使用Console.Readline()或者MessageBox.Show()之类的东西来暂停进程的启动,直到我们可以将调试器添加到该进程即可。