設定 KDNET USB 內核模式偵錯 (KDNET-USB)
Windows 偵錯工具支援透過 USB 3.0 纜線使用 KDNET 透過 USB 進行內核模式偵錯。 本文說明如何設定此傳輸選項。
執行調試程式的計算機稱為 主計算機,而偵錯的計算機稱為 目標計算機。
透過 USB 3.0 纜線進行偵錯需要下列硬體:
- 在主計算機上,xHCI USB 3.0+ 主機控制器和 USB3 連接埠。
- 在目標電腦上,xHCI USB 3.0+ 主機控制器和支援偵錯的 USB3 連接埠(DBC)
- 目標電腦 USB 主機控制器必須支援 Intel xHCI 偵錯功能介面 (DBC)。 如需詳細資訊,請參閱 Intel 網站上的 xHCI 規格。
二進位傳輸檔案
kdstub.dll和kdnic.sys驅動程式可用來支援 KDNET-USB 調試程式傳輸。
纜線需求
橙色Microsoft USB 偵錯纜線,這是 A-A 交叉纜線,具有兩個男性型 A 外掛程式和沒有 Vbus 連線。 此纜線可從 DataPro - USB 3.0 超速 A/A 偵錯纜線等廠商取得。
需要標準 USB 3.0 類型 C 到類型 A 適配卡,才能將主機類型 A 連接到目標類型 C 埠。
為了簡化疑難解答,請直接連接目標與主計算機之間的纜線,避免任何中樞或停駐站。
設定目標電腦
在目標計算機上,找出並啟動 UsbView 工具。 UsbView 工具包含在適用於 Windows 的偵錯工具中。 針對 x64 系統,UsbView 位於 C:\Program Files (x86)\Windows Kits\10\Tools\KitVersion\x64\usbview.exe。
在 UsbView 中,找出所有 xHCI 主機控制器。
在UsbView中,展開 xHCI 主機控制器的節點。 尋找主機控制器上的埠支援偵錯的指示。
[Port1] Is Port User Connectable: yes Is Port Debug Capable: yes Companion Port Number: 3 Companion Hub Symbolic Link Name: USB#ROOT_HUB30#5&32bab638&0&0#{...} Protocols Supported: USB 1.1: no USB 2.0: no USB 3.0: yes
記下您要用於偵錯之 xHCI 控制器的總線、裝置和函式編號。 UsbView 會顯示這些數位。 在下列範例中,總線號碼為 48、裝置號碼為 0,且函式號碼為 0。
USB xHCI Compliant Host Controller ... DriverKey: {36fc9e60-c465-11cf-8056-444553540000}\0020 ... Bus.Device.Function (in decimal): 48.0.0
如果您需要確認總線參數,請使用 裝置管理員。 在 裝置管理員 中,找出您想要用於偵錯的 USB 控制器。 在 [一般] 索引標籤的 [位置] 底下,會顯示總線、裝置和函式號碼。 b、 d 和 f 是 USB3 主機控制器的總線、裝置和函式號碼。 總線、裝置和函式編號必須是十進位格式。
您也可以使用kdnet.exe來協助收集USB控制器的相關信息。
C:\Program Files (x86)\Windows Kits\10\Debuggers\x64>kdnet Network debugging is supported on the following USB controllers: busparams=0.20.0, Intel(R) USB 3.0 eXtensible Host Controller - 1.0 (Microsoft) This Microsoft hypervisor supports using KDNET in guest VMs.
識別支援偵錯的 xHCI 控制器之後,下一個步驟是找出與 xHCI 控制器上埠相關聯的實體 USB 連接器。 若要尋找實體連接器,請將任何USB 3.0裝置插入目標電腦上的任何USB連接器。 重新整理 UsbView 以查看您的裝置所在的位置。 如果 UsbView 顯示已連線到所選 xHCI 主機控制器的裝置,則您找到可用於 USB 3.0 偵錯的實體 USB 連接器。
重要
使用 bcdedit
或 kdnet.exe 變更開機資訊之前,您可能需要暫時暫停測試計算機上的 Windows 安全性功能,例如 BitLocker 和安全開機。
在測試完成時重新啟用這些安全性功能,並在停用安全性功能時適當地管理測試計算機。
針對您使用的每個目標/主機組,在建議的 50000-50039 範圍內,挑選唯
<port address>
一的。 下列範例顯示 50005。在符合 CPU 類型的 WDK 調試程式目錄中找出KDNet.exe公用程式,例如 x64。
在目標計算機上,以系統管理員身分開啟 [命令提示字元] 視窗,然後輸入此命令以使用 選項啟用核心偵錯
-k
。 -w、-b 和 -h 會啟用 winload、bootmgr 和 Hypervisor 系統應用程式的內核偵錯。如需 WinDbg 選項的詳細資訊,請參閱 WinDbg - 命令行啟動選項。kdnet.exe 169.254.255.255 50005 -k
- 169.254.255.255 不可路由連結本機靜態IP位址必須用於透過USB3的 KDNET。
- kdnet.exe會傳回 WinDbg 用來連線到目標裝置的密鑰
w.x.y.z
。
若要使用特定的 USB 埠,請使用 -busparams 參數。
kdnet.exe -busparams 0.13.0 169.254.255.255 50005 -k
建議使用 KDNET 公用程式。 此工具會設定使用 bcdedit 設定更複雜的選項,以及檢查和設定支援PCI和電源管理的登錄值。
bcdedit /dbgsettings NET hostip:169.254.255.255 port:50001 key:1.2.3.4 busparams:0.20.0 noDhcp
停用電源管理
在某些情況下,電源轉換可能會干擾透過USB 3.0進行偵錯。 若要避免這些問題,請停用 xHCI 主機控制器及其根中樞的選擇性暫停,以供偵錯使用。
在 裝置管理員 中,流覽至 xHCI 主機控制器的節點。 以滑鼠右鍵按兩下節點,然後選擇 [ 屬性]。 如果有 [電源管理] 索引標籤,請開啟索引標籤,然後清除 [允許電腦關閉此裝置以儲存電源] 複選框。
在 裝置管理員 中,流覽至 xHCI 主機控制器根中樞的節點。 以滑鼠右鍵按兩下節點,然後選擇 [ 屬性]。 如果有 [電源管理] 索引標籤,請開啟索引標籤,然後清除 [允許電腦關閉此裝置以儲存電源] 複選框。
當您完成使用 xHCI 主機控制器進行偵錯時,請重新啟用 xHCI 主機控制器的選擇性暫停。
使用 WinDbg 啟動偵錯會話
將USB 3.0偵錯纜線連接到您已選擇在主機和目標電腦上進行偵錯的USB 3.0埠。
在主計算機上,開啟與主計算機上所執行之 Windows 位相符的 WinDbg 版本(以系統管理員身分執行)。 例如,如果主計算機執行的是64位版本的Windows,請以系統管理員身分開啟64位版本的WinDbg。
在 [ 檔案] 功能表上,選擇 [ 附加至核心]。 在 [核心偵錯] 對話框中,開啟 [Net] 索引卷標。輸入下列資訊,然後按兩下列資訊,然後按
<port address>
對於每個目標/主機組而言都是唯一的 ,而且是在建議的 50000-50039 範圍內,會在執行kdnet.exe時提供作為輸入。執行
<session key>
kdnet.exe時產生的 w.x.y.z,其值會顯示在命令輸出中。
使用 WinDbg 的命令行會話
您也可以在命令提示字元視窗中輸入此命令,以使用 WinDbg 啟動工作階段。
Windbg /k NET:port=<port address>,key=<session key>
重新啟動目標計算機
載入調試程式並準備好進行之後,請重新啟動目標電腦。 重新啟動計算機的方法之一,是從系統管理員的命令提示字元使用 shutdown -r -t 0
命令。
目標電腦重新啟動之後,調試程式應該會自動連線。
疑難排解
無法辨識 USB 裝置
如果您在插入偵錯纜線時,在主機上出現 Windows 通知,且無法辨識文字 USB 裝置,可能會發生已知的 USB 3.1 到 3.1 相容性問題。 當偵錯纜線連接到主機上的 USB 3.1 控制器和目標上的 Intel (Ice Lake 或 Tiger Lake) 3.1 USB 控制器時,此問題會影響偵錯組態。
如需詳細資訊和處理器模型清單,請參閱 Ice Lake(微控制器)和老虎湖(微控制器)。 若要尋找目標計算機的處理器模型,請開啟 [設定] 應用程式,然後移至 [系統] 和 [關於]。 處理器列在 [裝置規格] 底下。
若要確認此問題,請開啟 裝置管理員,並在通用序列總線控制器下尋找 USB 偵錯連線裝置。 如果找不到此裝置,請檢查 [其他裝置] 底下的 [未知裝置]。 以滑鼠右鍵按兩下裝置以開啟其屬性頁面。 裝置狀態文本框的文字 Windows 已停止此裝置,因為它回報問題 (Code 43) 和 USB 裝置傳回無效的 USB BOS 描述元。
若要解決此問題,請從系統管理員命令提示字元執行下列命令,以變更登錄:
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\usbflags\349500E00000 /v SkipBOSDescriptorQuery /t REG_DWORD /d 1 /f
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\usbflags\045E06560000 /v SkipBOSDescriptorQuery /t REG_DWORD /d 1 /f
直接編輯登錄時請小心,因為不正確的變更可能會導致系統不穩定。
聯機會在調試程式主控台視窗上重試訊息,且無法闖入目標 - SkipPciProbeDebugDevice
如果您在 KDNET 調試程式控制台中遇到下列訊息,則無法起始目標中的中斷,或遇到特定命令的問題(例如 kdfiles),可能是因為 KDNET 收到順序不一致的 Ping 封包。
... Retry sending the same data packet for 128 times.
The transport connection between host kernel debugger and target Windows seems lost.
please try resync with target, recycle the host debugger, or reboot the target Windows.
此問題可能會發生,因為pci.sys驅動程式正在探查偵錯裝置。 若要消除這些錯誤訊息,請在系統管理員命令提示字元的 TARGET 裝置上建立下列登錄專案。
如果初始 KD 傳輸在開機時無法連線,此設定也可以允許調試程式連線,基於其他原因,例如,如果偵錯裝置無法在開機時設定。
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\SERVICES\kdnet /v SkipPciProbeDebugDevice /t REG_DWORD /d 1 /f
然後重新啟動目標計算機。
shutdown /r /t 0
裝置重新啟動之後,錯誤應該會消失,而且命令應該如預期般運作。
NO_KDNIC設定,以提升效能和可靠性
如果目標計算機上安裝乙太網路 NIC,則可以藉由設定 NO_KDNIC
選項來達成額外的可靠性和效能改善。
bcdedit /set {current} loadoptions NO_KDNIC
新增 NO_KDNIC
是選擇性的,而且只有在目標有額外的 NIC、Wi-Fi 或 USB 埠來連接 USB 乙太網路卡以提供 Windows 的網路存取時,才能使用。
新增 NO_KDNIC
可防止kdnic.sys驅動程式 (迷你埠定時器型驅動程式) 在 KDNET 上執行,這表示不會透過 KDNET 傳輸路由 Windows TCP/IP 流量。 然後,KDNET 傳輸只能用來路由傳送目標 KDNET 與主機調試程式之間的偵錯相關封包。
這可協助解決kdnic.sys驅動程式在 kdnet 上執行時,可能會影響的網路效能。 在此情況下,目標永遠不會進入睡眠狀態,防止電源滴水測試,或透過 RDP 存取目標時會發生延遲。 這是因為 KDNET 介面在執行kdnic.sys時,必須路由傳送調試程式封包和 Windows TCP/IP 網路封包。