设置虚拟机的网络调试 - KDNET

本主题介绍如何配置与 Hyper-V 虚拟机 (VM) 的内核调试连接。

Hyper-V 虚拟机设置

要调试第 2 代 Hyper-V 虚拟机 (VM),请完成以下步骤。

1. 创建已安装 Windows 的 VM

有关创建 VM 的信息,请参阅使用 Hyper-V 创建虚拟机

2. 定义外部虚拟交换机

要与 VM 通信,可以使用虚拟外部网络交换机。 有关如何创建外部网络交换机的信息,请参阅创建虚拟网络

配置外部网络交换机时,必须设置以下选项。

选项
连接类型 外部网络
允许管理操作系统共享此网络适配器 Enabled
VLAN ID 已禁用

3. 禁用安全启动

要允许 kdnet 实用工具更新 BCDEdit 启动设置,请按照以下步骤暂时禁用虚拟机上的安全启动。

  1. 加载 Hyper-V 管理器并选择 VM 的属性。

  2. 选择“安全性”设置。

  3. 取消选中“启用安全启动”复选框。

  4. 选择“确定”以保存设置。

完成调试并在目标 VM 上禁用内核调试后,可以重新启用安全启动。

4. 安装 Windows 调试工具

调试工具用于调试器和 kdnet 实用工具,必须安装。 有关如何下载和安装调试工具的信息,请参阅 Windows 调试工具

设置虚拟机的网络调试 - KDNET

记录主机 IP 地址

要在与目标虚拟机相同的电脑上运行主机调试器,请执行以下步骤。

  1. 在主计算机 OS 中,打开命令提示符窗口并输入 IPConfig 以显示 IP 配置。

  2. 在命令输出中,找到配置为外部虚拟交换机的以太网适配器。

    ...
    
    Ethernet adapter vEthernet (External Virtual Switch):
    
    ...
    
    IPv4 Address. . . . . . . . . . . : <YourHostIPAddress>
    
    ...
    
    

提示

可能有多个具有类似名称的适配器条目。 确保找到所创建的虚拟交换机。

  1. 记录外部虚拟交换机的 IPv4 地址,该地址将用作调试的主机地址。

  2. 要确认目标计算机与主计算机之间的连接,请在目标计算机上打开提升的命令提示符窗口并输入以下命令,其中 YourHostIPAddress 是主计算机的 IP 地址。

    ping -4 <YourHostIPAddress>
    

设置 VM 目标计算机

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

  1. 找到 WDK kdnet.exeVerifiedNICList.xml 文件。 默认情况下,它们位于此处。
C:\Program Files (x86)\Windows Kits\10\Debuggers\x64

注意

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

  1. 要允许用于剪切和粘贴的长密钥,请启用增强的会话支持。 在 VM 窗口中的“视图”下拉菜单中,启用“增强会话”。

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

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

    C:\KDNET>kdnet
    
    Network debugging is supported on the following NICs:
    busparams=0.25.0, Intel(R) 82579LM Gigabit Network Connection, KDNET is running on this NIC.kdnet.exe
    
  4. 键入此命令以设置主机系统的 IP 地址并生成唯一的连接密钥。 使用前面记录的主机系统的 IP 地址。 在 50000-50039 范围内,为每个使用的目标/主机对选择唯一的端口地址。 对于本示例,我们将选择 50005。

    C:\>kdnet <YourIPAddress> <YourDebugPort> 
    
    Enabling network debugging on Microsoft Hypervisor Virtual Machine.
    Key=3u8smyv477z20.2owh9gl90gbxx.3sfsihzgq7di4.nh8ugnmzb4l7
    
    To debug this vm, run the following command on your debugger host machine.
    windbg -k net:port=50005,key=3u8smyv477z20.2owh9gl90gbxx.3sfsihzgq7di4.nh8ugnmzb4l7
    
    Then restart this VM by running shutdown -r -t 0 from this command prompt.
    
  5. 使用 CRTL+C 将提供的 Windbg 输出复制到命令缓冲区中。 这样做可避免尝试写下返回的长键值。

  6. 配置调试器设置后,重新启用 BitLocker 和安全启动。

  7. 由于具有“增强会话”支持的 VM 在停留在断点时可能会超时,因此请使用 VM 中的“查看”下拉菜单禁用“增强会话”支持。

  8. 加载并运行调试器后,将重启 VM。 接下来将介绍此过程。

启动调试会话

  1. 要连接到目标电脑,请使用 CTRL+V 在 OS 主命令窗口中粘贴之前复制的 kdnet 返回的 Windbg 字符串。

    C:\Debuggers\windbg -k net:port=<YourDebugPort>,key=<YourKey> 
    

首次尝试建立网络调试连接时,系统可能会提示你允许调试应用程序(WinDbg 或 KD)通过防火墙进行访问。 应通过选中所有三种网络类型的复选框来响应提示:域、专用和公共。

重启目标电脑

连接调试器后,重新启动目标计算机。 要强制 VM 完全重启,请从管理员的命令提示符处使用此命令。

shutdown -r -t 0

重启目标虚拟机后,主机 OS 中的调试器应连接。

连接到 VM 后,点击调试器上的中断,即可开始调试。

为支持调试连接,会添加一个内核调试网络适配器,并在 VM 重新启动后在网络属性中显示。

KDNET 虚拟机网络调试疑难解答

如果调试器未连接,请使用目标 VM 的 ping 命令验证连接。

C:\>Ping <HostComputerIPAddress>

有些事情不起作用,我不确定...

  • 确保已让 WinDbg 穿过防火墙。
  • 确认使用的是 BCDEdit 或 kdnet 生成的唯一密钥。

我的 VM 没有网络连接

  • 从 Hyper-V 管理器打开虚拟交换机管理器,选择现有的虚拟交换机,并通过从下拉列表中选择外部网络 NIC 并将其更改为 Microsoft 内核调试网络适配器,然后在“虚拟交换机管理器”对话框中选择“确定”。 更新虚拟交换机 NIC 后,请确保关闭并重启 VM。

将 Hyper-V 角色添加到 Windows 电脑的顺序

如果目标计算机是虚拟机主机,则可以设置网络调试,并且仍具有虚拟机的网络访问权限。

假设要在以下情况下设置网络调试。

  • 目标计算机只有一个网络接口卡。
  • 打算在目标计算机上安装 Hyper-V 角色。
  • 打算在目标计算机上创建一个或多个虚拟机。

最好的办法是在安装 Hyper-V 角色前在目标计算机上安装网络调试。 然后,虚拟机将有权访问网络。

如果决定在目标计算机上安装 Hyper-V 角色后设置网络调试,则必须更改虚拟机的网络设置,以便将其桥接到 Microsoft 内核网络调试适配器。 否则,虚拟机将无法访问网络。

另请参阅

使用虚拟 COM 端口手动设置虚拟机的内核模式调试

手动设置网络连接