设置虚拟机的网络调试 - KDNET
本主题介绍如何配置与 Hyper-V 虚拟机 (VM) 的内核调试连接。
Hyper-V 虚拟机设置
要调试第 2 代 Hyper-V 虚拟机 (VM),请完成以下步骤。
1. 创建已安装 Windows 的 VM
有关创建 VM 的信息,请参阅使用 Hyper-V 创建虚拟机。
2. 定义外部虚拟交换机
要与 VM 通信,可以使用虚拟外部网络交换机。 有关如何创建外部网络交换机的信息,请参阅创建虚拟网络。
配置外部网络交换机时,必须设置以下选项。
选项 | 值 |
---|---|
连接类型 | 外部网络 |
允许管理操作系统共享此网络适配器 | Enabled |
VLAN ID | 已禁用 |
3. 禁用安全启动
要允许 kdnet 实用工具更新 BCDEdit 启动设置,请按照以下步骤暂时禁用虚拟机上的安全启动。
加载 Hyper-V 管理器并选择 VM 的属性。
选择“安全性”设置。
取消选中“启用安全启动”复选框。
选择“确定”以保存设置。
完成调试并在目标 VM 上禁用内核调试后,可以重新启用安全启动。
4. 安装 Windows 调试工具
调试工具用于调试器和 kdnet 实用工具,必须安装。 有关如何下载和安装调试工具的信息,请参阅 Windows 调试工具。
设置虚拟机的网络调试 - KDNET
记录主机 IP 地址
要在与目标虚拟机相同的电脑上运行主机调试器,请执行以下步骤。
在主计算机 OS 中,打开命令提示符窗口并输入 IPConfig 以显示 IP 配置。
在命令输出中,找到配置为外部虚拟交换机的以太网适配器。
... Ethernet adapter vEthernet (External Virtual Switch): ... IPv4 Address. . . . . . . . . . . : <YourHostIPAddress> ...
提示
可能有多个具有类似名称的适配器条目。 确保找到所创建的虚拟交换机。
记录外部虚拟交换机的 IPv4 地址,该地址将用作调试的主机地址。
要确认目标计算机与主计算机之间的连接,请在目标计算机上打开提升的命令提示符窗口并输入以下命令,其中 YourHostIPAddress 是主计算机的 IP 地址。
ping -4 <YourHostIPAddress>
设置 VM 目标计算机
按照以下步骤,使用 kdnet.exe 实用工具在目标电脑上自动配置调试器设置。
- 找到 WDK kdnet.exe 和 VerifiedNICList.xml 文件。 默认情况下,它们位于此处。
C:\Program Files (x86)\Windows Kits\10\Debuggers\x64
注意
这些说明假定目标电脑和主电脑都运行 64 位版本的 Windows。 如果情况并非如此,最好的办法是在主电脑上运行与目标电脑相同“位数”的工具。 例如,如果目标电脑运行的是 32 位 Windows,请在主电脑上运行 32 版本的调试器。 有关详细信息,请参阅选择 32 位或 64 位调试工具。
要允许用于剪切和粘贴的长密钥,请启用增强的会话支持。 在 VM 窗口中的“视图”下拉菜单中,启用“增强会话”。
在目标 VM 计算机上,创建 C:\KDNET 目录,并将 kdnet.exe 和 VerifiedNICList.xml 文件复制到该目录。
在目标计算机上,以管理员身份打开“命令提示符”窗口。 输入此命令以验证目标计算机是否具有受支持的网络适配器。
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
键入此命令以设置主机系统的 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.
使用 CRTL+C 将提供的 Windbg 输出复制到命令缓冲区中。 这样做可避免尝试写下返回的长键值。
配置调试器设置后,重新启用 BitLocker 和安全启动。
由于具有“增强会话”支持的 VM 在停留在断点时可能会超时,因此请使用 VM 中的“查看”下拉菜单禁用“增强会话”支持。
加载并运行调试器后,将重启 VM。 接下来将介绍此过程。
启动调试会话
要连接到目标电脑,请使用 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 内核网络调试适配器。 否则,虚拟机将无法访问网络。