自动设置 KDNET 网络内核调试

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

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

确定主计算机的 IP 地址

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

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

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

...

Ethernet adapter Ethernet:
...

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

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

设置主机和目标计算机

使用 kdnet.exe 实用工具通过执行以下步骤在目标电脑上自动配置调试器设置。

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

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

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

    这些说明假定这两台电脑都在目标和主机上运行 64 位版本的 Windows。 如果不是这种情况,最佳方法是在目标正在运行的主机上运行相同的工具“位数”。 例如,如果目标运行的是 32 位 Windows,请在主机上运行 32 版本的调试器。 有关详细信息,请参阅 选择 32 位或 64 位调试工具

  3. 在主计算机上,将两个文件复制到网络共享或拇指驱动器,以便它们在目标计算机上可用。

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

    重要

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

  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...

重启目标电脑

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

shutdown -r -t 0 

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

故障排除提示

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

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

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

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

    • (WinDbg) 在应用程序列表中, 找到 winDbg 引擎进程 (TCP) (所有)

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

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

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

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

使用 ping 测试连接

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

   C:\>Ping <HostComputerIPAddress>

选择用于网络调试的端口

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

可以选择 49152 到 65535 的任何端口号。 建议的范围介于 50000 和 50039 之间。 你选择的端口由主计算机上运行的调试器进行独占访问。

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

支持的网络适配器

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

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

启用其他调试类型

从 2020 年 10 月 Windows 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 选项 说明 等效的 set 命令
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 总线、设备和功能编号。 对于“总线参数”,请输入 bd.f ,其中 bdf 是适配器的总线编号、设备编号和功能编号。 这些值显示在“常规”选项卡上的“位置”下的设备管理器中 。

例如:

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

另请参阅