使用 WinDbg (经典) 进行实时Kernel-Mode调试

有两种方法可以使用 WinDbg 启动实时内核模式调试会话。

WinDbg 菜单

当 WinDbg 处于休眠模式时,可以通过从“文件”菜单中选择“内核调试”或按 CTRL+K 来启动内核调试会话。 出现“ 内核调试 ”对话框时,单击相应的选项卡: “NET”、“ 1394”、“ USB”、“ COM”或“ 本地”。 每个选项卡指定不同的连接方法。

命令提示符

在命令提示符窗口中,可以在启动 WinDbg 时启动内核模式调试会话。 输入以下命令之一:

windbg [-y SymbolPath] -k net:port=PortNumber,key=Key[,target=TargetIPAddress|TargetMachineName]

windbg [-y SymbolPath] -k usb:targetname=USBString

windbg [-y SymbolPath] -k com:port=ComPort,baud=BaudRate

windbg [-y SymbolPath] -k com:ipport=SerialTcpIpPort,port=SerialIPAddress

windbg [-y SymbolPath] -k com:pipe,port=\\VMHost\pipe\PipeName[,resets=0][,重新连接]

windbg [-y SymbolPath] -k com:调制解调器

windbg [-y SymbolPath] -kl

windbg [-y SymbolPath] -k

有关详细信息,请参阅 WinDbg Command-Line选项

环境变量

若要通过串行 (COM 端口) 或 1394 连接进行调试,可以使用环境变量来指定连接设置。

使用以下变量指定串行连接。

set _NT_DEBUG_PORT = ComPort

set _NT_DEBUG_BAUD_RATE = BaudRate

有关详细信息,请参阅 内核模式环境变量

参数

SymbolPath
符号文件所在的目录列表。 列表中的目录用分号分隔。 有关详细信息,请参阅 符号路径

PortNumber
用于网络调试的端口号。 可以选择从 49152 到 65535 的任意数字。 有关详细信息,请参阅 手动设置网络连接

关键
用于网络调试的加密密钥。 建议使用自动生成的密钥,该密钥在配置目标计算机时由 bcdedit 提供。 有关详细信息,请参阅 手动设置网络连接

TargetIPAddress
目标计算机的 IPv4 地址。

指定 target= IP 地址时,这会导致调试器通过向目标发送特殊数据包来启动与指定目标计算机的连接,从而导致它尝试与该调试器连接。 调试器将大约每半秒重复向目标发送数据包,并尝试连接。 如果连接成功,目标将删除任何现有连接,并且仅与调试器的此实例通信。 这使你可以控制调试会话,使其远离现有的调试连接。

使用主机 IP 地址配置目标,并且调试器在使用配置的主机 IP 地址的计算机上运行时,无需指定 target= IP 地址参数。 使用主机 IP 地址配置目标时,它将每三秒向主机发送一次 OFFER 数据包。 当未指定 target= IP 地址时,OFFER 数据包允许调试器连接到主机。

有关在目标上配置主机 IP 地址的详细信息,请参阅 自动设置 KDNET 网络内核调试手动设置 KDNET 网络内核调试

TargetMachineName
目标电脑的计算机名称。 若要使用计算机名称,网络上的 DNS 系统必须具有与目标电脑的 IP 地址关联的计算机名称。

1394Channel
1394 通道编号。 有效通道号是介于 0 和 62 之间的任意整数(含)。 1394Channel 必须与目标计算机使用的数字匹配,但不依赖于适配器上选择的物理 1394 端口。 有关详细信息,请参阅 手动设置 1394 连接

1394Protocol
要用于 1394 内核连接的连接协议。 这几乎始终可以省略,因为调试器将自动选择正确的协议。 如果要手动设置此设置,并且目标计算机正在运行 Windows XP,应将 1394Protocol 设置为等于“channel”。 如果目标计算机运行的是 Windows Server 2003 或更高版本,则应将 1394Protocol 设置为等于“instance”。 如果省略它,调试器将默认为适用于当前目标计算机的协议。 这只能通过命令行或环境变量指定,而不能通过 WinDbg 图形界面进行指定。

USBString
USB 连接字符串。 这必须与使用 /targetname 启动选项指定的字符串匹配。 有关详细信息,请参阅 手动设置 USB 3.0 连接手动设置 USB 2.0 连接

ComPort
COM 端口的名称。 这可以是格式“com2”或格式“\\.\com2”,但不应只是数字。 有关详细信息,请参阅 手动设置串行连接

BaudRate
波特率。 这可以是 9600、19200、38400、57600 或 115200。

SerialTcpIpPort
模拟串行 COM 端口的目标 TCP IP 端口。

SerialIPAddress
模拟串行 COM 端口的目标 TCP IP 地址。

VMHost
调试虚拟机时, VMHost 指定运行虚拟机的物理计算机的名称。 如果虚拟机与内核调试器本身在同一台计算机上运行,请对 VMHost 使用单个周期 (.) 。 有关详细信息,请参阅 设置与虚拟机的连接

PipeName
虚拟机为调试连接创建的管道的名称。

resets=0
指定当主机和目标同步时,可以向目标发送无限数量的重置数据包。 仅当调试某些类型的虚拟机时,才需要此参数。

重新
导致调试器在发生读/写失败时自动断开连接并重新连接管道。 此外,如果在启动调试器时找不到命名管道,则重新连接参数将导致它等待此名称的管道出现。 仅当调试某些类型的虚拟机时,才需要此参数。

-Kl
使调试器执行本地内核模式调试。 有关详细信息,请参阅 本地Kernel-Mode调试

示例

以下批处理文件可用于通过 COM 端口连接设置和启动调试会话。

set _NT_SYMBOL_PATH=d:\mysymbols
set _NT_DEBUG_PORT=com1
set _NT_DEBUG_BAUD_RATE=115200
set _NT_DEBUG_LOG_FILE_OPEN=d:\debuggers\logfile1.log
windbg -k

以下命令行可用于启动不带任何环境变量的 WinDbg。

windbg -y d:\mysymbols -k com:port=com2,baud=57600

windbg -y d:\mysymbols -k com:port=\\.\com2,baud=115200

windbg -y d:\mysymbols -k net:port=50000,key=AutoGeneratedKey

windbg -y d:\mysymbols -k net:port=50000,key=AutoGeneratedKey,target=TargetIPAddress

另请参阅

WinDbg 命令行选项

内核模式环境变量