自动设置 KDNET 网络内核调试

Windows 调试工具支持通过网络进行内核调试。 本文介绍如何使用 kdnet.exe 安装工具自动设置网络调试。

运行调试器的计算机称为主计算机,正在调试的计算机称为目标计算机。 主机必须运行 Windows 7 或更高版本,并且目标计算机必须运行 Windows 8 或更高版本。

确定主机的 IP 地址。

  1. 确认目标 PC 和主机 PC 已使用适当的网络电缆连接到网络集线器或交换机。

  2. 在主机上,打开命令提示符,并输入 IPConfig 以显示 IP 配置。

  3. 在命令输出中,找到以太网适配器的 IPv4 地址。

...

Ethernet adapter Ethernet:
...

IPv4 Address. . . . . . . . . . . : <YourHostIPAddress>
...

或者,使用设置、网络和 Internet、以太网收集 IPv4 地址信息。

  1. 记下打算用于调试的网络适配器的 IPv4 地址。

设置主机和目标计算机

按照以下步骤,使用 kdnet.exe 实用工具在目标 PC 上自动配置调试器设置。

  1. 确认主计算机系统上已安装 Windows 调试工具。 有关下载和安装调试器工具的信息,请参阅适用于 Windows 的调试工具

  2. 找到 kdnet.exeVerifiedNICList.xml 文件。 默认情况下,文件位于以下位置:

    C:\Program Files (x86)\Windows Kits\10\Debuggers\x64
    

    这些说明假定目标电脑和主电脑都运行 64 位版本的 Windows。 如果情况并非如此,最好的办法是在主机上运行与目标计算机相同“位数”的工具。 例如,如果目标电脑运行的是 32 位 Windows,请在主电脑上运行 32 版本的调试器。 有关详细信息,请参阅选择 32 位或 64 位调试工具

  3. 在主计算机上,将这两个文件复制到网络共享或 U 盘,以便在目标计算机上可用。

  4. 在目标计算机上,创建 C:\KDNET 目录,并将 kdnet.exeVerifiedNICList.xml 文件复制到该目录。

    重要

    在使用 kdnet.exe 更改启动信息之前,可能需要在测试 PC 上暂时挂起 Windows 安全功能,例如 BitLocker 和安全启动。 在已禁用这些安全功能的情况下,在测试完成后重新启用这些安全功能,并适当地管理测试 PC。

  5. 在目标计算机上,以管理员身份打开命令提示符。 输入此命令以验证目标计算机是否具有受支持的网络适配器:

    C:\KDNET>kdnet.exe
    Network debugging is supported on the following NICs:
    busparams=1.0.0, Broadcom NetXtreme Gigabit Ethernet, Plugged in.  
    This Microsoft hypervisor supports using KDNET in guest VMs.
    
  6. 当来自 kdnet.exe 的输出指示目标上的网络适配器受支持时,可以继续操作。

  7. 键入以下命令以设置主机系统的 IP 地址并生成唯一的连接密钥。 使用 IP 地址或主机系统的名称。 在建议的 50000-50039 范围内,为每个使用的目标/主计算机对选择唯一的端口地址。

    C:\KDNET>kdnet.exe <HostComputerIPAddress> <YourDebugPort> 
    
    Enabling network debugging on Intel(R) 82577LM Gigabit Network Connection.
    Key=2steg4fzbj2sz.23418vzkd4ko3.1g34ou07z4pev.1sp3yo9yz874p
    
  8. 将返回的密钥复制到记事本 .txt 文件中。

将 WinDbg 连接到目标进行内核调试

在主计算机上打开 WinDbg。 在“文件”菜单上,选择“内核调试”。 在“内核调试”对话框中,打开 Net 选项卡。粘贴以前保存在记事本 .txt 文件中的端口号和密钥。 选择“确定”

还可以通过打开命令提示符并输入以下命令来启动 WinDbg 会话。 <YourPort> 是你之前选择的端口,<YourKey> 是 kdnet.exe 之前返回的密钥。 粘贴以前保存在记事本 .txt 文件中的密钥。

windbg.exe -k -d net:port=<YourDebugPort>,key=<YourKey> 

示例中所示的可选 -d 参数启用早期中断。 有关详细信息,请参阅 WinDbg 命令行选项

如果系统提示允许 WinDbg 通过防火墙访问端口,则允许 WinDbg 访问所有三种不同网络类型的端口。

Windows 安全警报的屏幕截图,其中包含允许访问所有三种网络类型的选项。

此时,调试器将等待目标重新连接。 文本显示在调试器命令窗口中。 该文本将类似于以下内容:

Microsoft (R) Windows Debugger Version 1.0.1908.30002 AMD64
Copyright (c) Microsoft Corporation. All rights reserved.

Using NET for debugging
Opened WinSock 2.0
Waiting to reconnect...

重启目标 PC

一旦调试器处于“正在等待重新连接...”阶段,请重新启动目标计算机。 重启 PC 的一种方法是从管理员的命令提示符处使用此命令。

shutdown -r -t 0 

目标电脑重启后,调试器应自动连接。

故障排除提示

必须允许通过防火墙调试应用程序

在运行调试器的主机端,必须启用所有类型的网络,以允许调试器通过防火墙与目标通信。

可以使用控制面板允许通过防火墙进行访问。

  1. 打开“控制面板”>“系统和安全”,然后选择“允许应用通过 Windows 防火墙”。

    • (WinDbg) 在应用程序列表中,找到 WinDbg 引擎进程 (TCP)(全部)

    • (WinDbg (classic))在应用程序列表中,找到 Windows GUI 符号调试器Windows 内核调试器

  2. 使用复选框允许这两个应用程序通过所有三种不同网络类型。

  3. 向下滚动并选择“确定”保存防火墙更改。 重启调试程序。

    控制面板防火墙配置的屏幕截图,其中显示已启用了所有三种网络类型的 Windows GUI 符号调试器和 Windows 内核调试器应用程序。

使用 ping 测试连接

如果调试器超时且未连接,请使用目标 PC 上的 ping 命令验证连接。

   C:\>Ping <HostComputerIPAddress>

选择用于网络调试的端口

如果调试器超时且未连接,可能是因为默认端口号 50000 已被使用或被阻止。

可以选择从 49152 到 65535 的任何端口号。 建议的范围介于 50000 和 50039 之间。 选择的端口由在主机上运行的调试器打开以独占访问权限。

可用于网络调试的端口号范围可能受公司网络策略的限制。 要确定公司的策略是否限制了可用于网络调试的端口范围,请咨询网络管理员。

支持的网络适配器

如果在运行 kdnet.exe 时显示“此计算机中的任何 NIC 都不支持网络调试”,则表示不支持网络适配器

主机可以使用任何网络适配器,但目标计算机必须使用 Windows 调试工具支持的网络适配器。 有关支持的网络适配器列表,请参阅 Windows 10 中的网络内核调试支持的以太网 NIC 以及 Windows 8.1 中的网络内核调试支持的以太网 NIC

启用其他调试类型

从 Windows 10 2020 年 10 月更新 (20H2) 开始,支持以下选项来启用四种类型的调试:

可以指定调试类型的任意组合。

如果未指定调试类型,则启用内核调试。

如果同时启用了虚拟机监控程序和内核调试,虚拟机监控程序端口将设置为 <YourDebugPort> + 1。

用法示例

使用 - bkw 选项启用 bootmgr、内核和 winload 调试。

C:\>kdnet.exe <HostComputerIPAddress> <YourDebugPort> -bkw

Enabling network debugging on Intel(R) 82577LM Gigabit Network Connection.
Key=2steg4fzbj2sz.23418vzkd4ko3.1g34ou07z4pev.1sp3yo9yz874p

调试类型选项摘要

KNDET 选项 说明 等效设置命令
b 启用 bootmgr 调试 bcdedit /bootdebug {bootmgr} on
h 启用虚拟机监控程序调试 bcdedit /set hypervisordebug on
k 启用内核调试 bcdedit /debug on
w 启用 winload 调试 bcdedit /bootdebug on

指定总线参数

如果 kdnet 无法自动确定传输的总线参数,请使用以下语法在命令行中使用 /busparams 选项指定它们。

kdnet.exe /busparams [b.d.f] [host] [port] [-[b][h][k][w]]

b.d.f 指定要配置的设备的总线参数。

使用目标计算机上的设备管理器确定要用于调试的适配器的 PCI 总线、设备和函数编号。 对于总线参数,请输入 b.d.f,其中 bdf 是适配器的总线编号、设备编号和函数编号。 这些值显示在“常规”选项卡上的“位置”下的设备管理器中

例如:

C:\>kdnet.exe /busparams 0.29.7 <HostComputerIPAddress> <YourDebugPort> -bkw

另请参阅