使用 WinDbg(经典)的实时内核模式调试
可通过两种方式使用 WinDbg 启动实时内核模式调试会话。
WinDbg 菜单
当 WinDbg 处于休眠模式时,可以通过从“文件”菜单或按 Ctrl+K 选择内核调试会话来开始内核调试会话。 出现“内核调试”对话框时,单击相应的选项卡:NET、COM、USB 或本地。 每个选项卡指定不同的连接方法。
命令提示符
在命令提示符窗口中,启动 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][,reconnect]
windbg [-y SymbolPath] -k com:调制解调器
windbg [-y SymbolPath] -kl
windbg [-y SymbolPath] -k
有关详细信息,请参阅 WinDbg 命令行选项。
环境变量
若要通过串行(COM 端口)进行调试,可以使用环境变量来指定连接设置。
使用以下变量指定串行连接。
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 地址关联的计算机名称。
USBString
USB 连接字符串。 这必须与使用 /targetname 启动选项指定的字符串匹配。 有关详细信息,请参阅设置 USB 3.0 xHCI-DBC 内核模式调试(KDUSB)。
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
使调试器执行本地内核模式调试。 有关详细信息,请参阅 本地内核模式调试。
以前的版本参数
重要
1394 传输可用于 Windows 10 版本 1607 及更低版本。 它在 Windows 的更高版本中不可用。 应将项目转换为其他传输,例如使用以太网的 KDNET。 有关该传输的详细信息,请参阅自动设置 KDNET 网络内核调试。
1394Channel
1394 通道编号。 有效通道号是介于 0 和 62 之间的任意整数,包括 0 和 62。 1394Channel 必须与目标计算机使用的数字匹配,但不依赖于适配器上选择的物理 1394 端口。
1394Protocol
要用于 1394 内核连接的连接协议。 这几乎始终可以省略,因为调试器将自动选择正确的协议。 如果想要手动设置此设置,并且目标计算机正在运行 Windows XP, 应将 1394Protocol 设置为“channel”。 如果目标计算机运行的是 Windows Server 2003 或更高版本, 则应将 1394Protocol 设置为“instance”。 如果省略,调试器将默认为适用于当前目标计算机的协议。 这只能通过命令行或环境变量指定,而不能通过 WinDbg 图形界面指定。
示例
以下批处理文件可用于通过 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