【发布时间】:2015-07-15 19:09:15
【问题描述】:
我还想问一件事:在某处我读到 windbg 支持多种调试模式,其中一种模式是某种内核调试,其中系统正常运行并且不等待 windbg 断点等。是这种本地内核调试模式?另外,如果有人可以非常简要地澄清Non invasive debugging 和Dormant mode 之间的区别。我没有从 MSDN 中得到它。谢谢
【问题讨论】:
我还想问一件事:在某处我读到 windbg 支持多种调试模式,其中一种模式是某种内核调试,其中系统正常运行并且不等待 windbg 断点等。是这种本地内核调试模式?另外,如果有人可以非常简要地澄清Non invasive debugging 和Dormant mode 之间的区别。我没有从 MSDN 中得到它。谢谢
【问题讨论】:
你可以分几次
a) 内核调试和用户态调试(应用程序调试)之间
b) 在实时调试(运行系统)和事后调试(故障转储分析)之间
c) 本地调试和远程调试之间
所以总共有8种调试组合。
对于本地实时内核调试,您需要将 Windows 内核置于调试模式。如果您不希望这样,您可以使用SysInternals LiveKd 进行“伪”实时本地内核调试。
非侵入式调试是用户模式调试的一个子集,您已经链接到的文章(这是 WinDbg 帮助的副本)对此进行了最佳描述,其中说:
使用非侵入式调试,您没有那么多调试操作。但是,您可以最大限度地减少调试器对目标应用程序的干扰。如果目标应用程序停止响应,无创调试很有用。
在非侵入式调试中,调试器实际上并不附加到目标应用程序。调试器挂起目标的所有线程,并可以访问目标的内存、寄存器和其他此类信息。但是,调试器无法控制目标。
休眠模式是 WinDbg 正在运行但未附加到任何目标时。例如。如果您只是在没有任何命令行选项的情况下启动 WinDbg 并且尚未按下 F6 以附加到进程。
【讨论】:
LiveKd 不允许 允许您执行实时本地内核调试。它拍摄内存快照并在故障转储分析模式下运行 WinDbg。如果您打开由LiveKd 运行的WinDbg,您可以看到传递给它的-z foo.dmp 参数。 -z 是 flag for loading a dump file。
bcdedit /debug on 或在 XP 上的 boot.ini 文件中添加 /debug)才能正常工作,就像通过 WinDbg 进行实时内核调试一样. LiveKd 有时确实是一个不错的选择;我不是说别的。我用过不止一次。但它为您提供了一个静态转储文件,并且不允许您将数据 写入 到内存等中(您很可能不应该尝试,但是通过“真正的”本地内核调试您 可以,尽管可能很危险)。是的,编辑使答案更加准确。