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

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

Hyper-V 虚拟机设置

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

1.创建已安装Windows VM

若要了解如何创建 VM,请参阅 使用 Hyper-V 创建虚拟机

2.定义外部虚拟交换机

若要与 VM 通信,可以使用虚拟外部网络交换机。 若要了解如何创建外部网络交换机,请参阅 创建虚拟网络

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

选项
连接类型 外部网络
允许管理操作系统共享此网络适配器 已启用
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>
    
    ...
    
    
  3. 记录外部虚拟交换机的 IPv4 地址,该地址将用作调试的主机地址。

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

    ping -4 <YourHostIPAddress>
    

设置 VM 目标计算机

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

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

备注

这些方向假定这两个电脑在目标计算机和主机Windows运行 64 位版本的服务器。 如果不是这种情况,最佳方法是在运行目标的主机上运行相同的"位"工具。 例如,如果目标运行的是 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 将前面复制的 kdnet 返回的 windbg 字符串粘贴到主 OS 命令窗口中。

    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,然后在"虚拟交换机管理器"对话框中选择"确定",将外部网络 NIC 更改为 Microsoft 内核调试网络适配器。 更新虚拟交换机 NIC 后,请确保关闭并重启 VM。

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

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

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

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

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

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

相关主题

使用Kernel-Mode COM 端口手动设置虚拟机的调试

手动设置网络连接