本地内核模式调试

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

设置本地 Kernel-Mode 调试

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

启动调试会话

使用 WinDbg

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

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

windbg -kl

使用 KD

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

kd -kl

不可用的命令

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

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

  • 执行命令,例如 g(开始执行)p(单步执行)t(跟踪)wt(跟踪并监视数据)tb(跟踪到下一分支)gh(异常处理后继续执行)gn(未处理异常继续执行)

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

  • 断点命令,如 bpbubabcbdbebl

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

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

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

可用的命令

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

执行本地内核调试时遇到困难

本地内核调试是一项非常微妙的作。 请小心不要破坏或导致系统崩溃。

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

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

LiveKD

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

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