設定虛擬機的網路偵錯 - KDNET
本主題描述如何設定 Hyper-V 虛擬機 (VM) 的核心偵錯連線。
Hyper-V 虛擬機設定
若要對 Gen 2 Hyper-V 虛擬機進行偵錯,請完成下列步驟。
1.建立已安裝 Windows 的 VM
如需如何建立 VM 的資訊,請參閱 使用 Hyper-V 建立虛擬機。
2.定義外部虛擬交換器
若要與 VM 通訊,可以使用虛擬外部網路交換器。 如需如何建立外部網路交換器的資訊,請參閱 建立虛擬網路。
設定外部網路交換器時,必須設定下列選項。
選項 | 值 |
---|---|
連線類型 | 外部網路 |
允許管理作業系統共用此網路介面卡 | 已啟用 |
VLAN 識別碼 | 停用 |
3.停用安全開機
若要允許 kdnet 公用程式更新 BCDEdit 開機設定,請遵循下列步驟暫時停用虛擬機上的安全開機。
載入 Hyper-V 管理員,然後選取 VM 的屬性。
選取 [ 安全性 設定]。
取消核取 [ 啟用安全開機] 複選框。
選取 [OK] \(確定\)以儲存設定。
完成偵錯后,您可以重新啟用安全開機,並在目標 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檔案複製到該目錄。
在目標計算機上,以 管理員 istrator 開啟命令提示字元視窗。 輸入此命令以確認目標電腦具有支援的網路適配器。
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 貼上您稍早複製之 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 管理員開啟 Virtual Switch Manager,選取現有的虛擬交換器,然後從下拉式方塊中選取外部網路 NIC,然後從 [虛擬交換器管理員] 對話框中選取 [確定],將外部網路 NIC 變更為 [Microsoft 核心偵錯網络適配器]。 更新虛擬交換器 NIC 之後,請務必關閉 VM 並重新啟動。
將 Hyper-V 角色新增至 Windows 計算機的順序
如果您的目標電腦是虛擬機主機,您可以設定網路偵錯,但仍具有虛擬機的網路存取權。
假設您想要在下列情況下設定網路偵錯。
- 目標電腦具有單一網路介面卡。
- 您想要在目標電腦上安裝 Hyper-V 角色。
- 您想要在目標電腦上建立一或多個虛擬機。
最好的方法是在安裝 Hyper-V 角色之前,先在目標電腦上設定網路偵錯。 然後,虛擬機將可以存取網路。
如果您決定在目標計算機上安裝 Hyper-V 角色之後設定網路偵錯,則必須變更虛擬機的網路設定,將它們橋接至 Microsoft 核心網路偵錯配接器。 否則,虛擬機將無法存取網路。