Debugging Tools for Windows

重新附加到目标程序

如果调试器在用户模式调试时冻结了,或因为其他原因停止响应(即崩溃),可以将一个新调试器附加到已存在的进程上。

注意 该方法仅在Microsoft Windows XP和之后版本Windows中支持。该方法不管进程是调试器创建的还是附加上去的,也不管是否使用了-pd选项。

使用以下步骤来重新将调试器附加到目标程序:

  1. 对目标程序获得进程ID
  2. 打开一个新的CDB或WinDbg。使用-pe命令行选项。

    Debugger -pe -p PID 

    也可以使用其他命令行选项

    可以在一个静止的调试器中使用.attach (Attach to Process)命令和-e选项。

  3. 附加完成后,结束原来的调试器进程。
  4. 如果进程没有正常响应,可能是因为挂起计数太高。可以使用~m (Resume Thread)命令来减少挂起计数。关于挂起计数的更多信息,查看控制进程和线程

如果原来的调试器还在正常工作,该方法可能无效。两个调试器会竞争调试事件,并且Windows操作系统没有必要将所有调试事件都通知新调试器。

如果原来的调试器在附加新调试器之前就已经结束,目标程序也会被结束掉。 (但是,如果调试器以-pd选项附加上去并正常结束,目标程序会继续运行。这种情况下,第二个调试器可以使用-pe选项附加到目标程序。)

如果已经在调试一个进程并想停止附加,但保持进程在调试状态冻结,可以使用.abandon (Abandon Process)命令。该命令之后,任何Windows调试器都可以用本主题描述的方法重新附加到进程上。

Build machine: CAPEBUILD