返回
如何在 WinDbg 中中止卡住的长时间操作?
windows
2024-03-19 08:15:39
如何在 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 中长时间操作的快捷键和命令非常有用,可以帮助你节省时间和避免浪费精力。
常见问题解答:
-
我可以使用哪些其他方法来中止操作?
虽然上述方法是最常见的,但你还可以尝试使用
!terminatesession
命令或Ctrl+Break
组合键。 -
我可以在操作中止后恢复它吗?
不行,操作中止后无法恢复。
-
为什么我无法中止某些操作?
某些操作(如正在执行的调试器扩展)是无法被用户中止的。
-
如何识别正在执行操作的线程?
可以使用
!thread
命令来查看正在运行的线程并确定哪个线程正在执行操作。 -
如果我按了 Ctrl+C 但操作没有中止怎么办?
尝试使用
!interrupt
或.kill
命令,或者使用!thread
命令来识别并中止执行操作的线程。