返回

如何在 WinDbg 中中止卡住的长时间操作?

windows

如何在 WinDbg 中中止长时间操作?

在使用 WinDbg 调试时,你可能会遇到它卡在 **Busy* * 状态,执行某个长时间操作。这通常是由于你试图调试无法找到的变量,或者在没有符号的情况下设置断点等原因造成的。

如何中止当前操作?

**子
最简单的中止方法是按 Ctrl+C 。这将立即终止正在进行的操作,让你返回 WinDbg 提示符。

**子
!interrupt 命令

要使用此命令,只需在 WinDbg 提示符处输入 !interrupt 并按 Enter 键。

.kill 命令

.kill 命令也可以中止操作。在 WinDbg 提示符处输入 .kill 并按 Enter 键。

注意:

  • 某些操作(如正在执行的调试器扩展)可能无法被这些方法中止。
  • 在极少数情况下,你可能需要使用 !thread 命令来识别并中止执行操作的线程。

示例:

0:000> .load c:\symbols\mymodule.pdb
Loading symbols for c:\symbols\mymodule.pdb
Sat Dec 10 11:35:12.402 2022
Loaded c:\symbols\mymodule.pdb
Reading symbols from c:\symbols\mymodule.pdb...
0:000> dt _variable
Loading symbols for c:\symbols\mymodule.pdb
Sat Dec 10 11:35:12.412 2022
**\*Busy\** * Loading symbols for c:\symbols\mymodule.pdb
0:000> !interrupt
Loading symbols for c:\symbols\mymodule.pdb
Sat Dec 10 11:35:12.432 2022
0:000>

正如你所看到的,dt 命令开始执行,但随后使用 !interrupt 命令中断了它。

结论:

中止 WinDbg 中长时间操作的快捷键和命令非常有用,可以帮助你节省时间和避免浪费精力。

常见问题解答:

  1. 我可以使用哪些其他方法来中止操作?

    虽然上述方法是最常见的,但你还可以尝试使用 !terminatesession 命令或 Ctrl+Break 组合键。

  2. 我可以在操作中止后恢复它吗?

    不行,操作中止后无法恢复。

  3. 为什么我无法中止某些操作?

    某些操作(如正在执行的调试器扩展)是无法被用户中止的。

  4. 如何识别正在执行操作的线程?

    可以使用 !thread 命令来查看正在运行的线程并确定哪个线程正在执行操作。

  5. 如果我按了 Ctrl+C 但操作没有中止怎么办?

    尝试使用 !interrupt.kill 命令,或者使用 !thread 命令来识别并中止执行操作的线程。