本地内核模式调试

适用于 Windows 的调试工具支持 本地内核调试。 这是单台计算机上的内核模式调试。 换句话说,调试器在正在调试的同一台计算机上运行。

设置本地 Kernel-Mode 调试

有关设置本地内核模式调试的信息,请参阅 手动设置本地 Kernel-Mode 调试单台计算机

启动调试会话

使用 WinDbg

以管理员身份打开 WinDbg。 在“ 文件 ”菜单上,选择“ 内核调试”。 在“内核调试”对话框中,打开“ 本地 ”选项卡。选择“ 确定”。

还可以通过以管理员身份打开命令提示符窗口并输入以下命令来启动 WinDbg 会话:

windbg -kl

使用 KD

以管理员身份打开命令提示符窗口,并输入以下命令:

kd -kl

不可用的命令

并非所有命令都在本地内核调试会话中可用。 通常,不能使用导致目标计算机停止的任何命令,甚至暂时停止,因为无法恢复操作。

具体而言,不能使用以下命令:

  • 执行命令,例如 g (Go) p (Step) t (跟踪) wt (跟踪和监视数据) tb (跟踪到下一个分支) gh () Go gn (Go 未处理异常)

  • 关闭和转储文件命令,例如 .crash.dump.reboot

  • 断点命令,例如 bpbubabcbdbebl

  • 注册显示命令,例如 r 和变体

  • 堆栈跟踪命令,例如 k 和变体

如果使用 WinDbg 执行本地内核调试,则所有等效的菜单命令和按钮也不可用。

可用的命令

所有内存输入和输出命令都可用。 可以从用户内存和内核内存中自由读取。 还可以写入内存。 请确保不要写入内核内存的错误部分,因为它可能会损坏数据结构,并经常导致计算机停止响应 (即 崩溃) 。

执行本地内核调试的困难

本地内核调试是一项非常精细的操作。 请注意,系统不会损坏或崩溃。

本地内核调试最困难的方面之一是计算机状态在不断变化。 内存被分页和传出,活动进程不断变化,虚拟地址上下文不保持不变。 但是,在这些情况下,可以有效地分析变化缓慢的事物,例如某些设备状态。

内核模式驱动程序和 Windows 操作系统经常使用 DbgPrint 和相关函数将消息发送到内核调试器。 在本地内核调试期间,这些消息不会自动显示。 可以使用 !dbgprint 扩展来显示它们。

LiveKD

LiveKD 工具模拟本地内核调试。 此工具会创建内核内存的“快照”转储文件,而不会在进行此快照时实际停止内核。 (因此,快照实际上可能不会显示计算机的单一即时状态。)

LiveKD 不是 Windows 调试工具包的一部分。 可以从 Windows Sysinternals 站点下载 LiveKd