本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
透過網路對 Windows 執行個體進行核心除錯
KDNET 彈性網路轉接器擴充性模組 (ENA) 是一種硬體驅動程式支援層,可透過 Amazon Elastic Compute Cloud 執行個體上的 ENA 透過網路進行 Windows 核心偵錯。您可以使用擴充模組搭配 Windows Debugger (WinDbg),在執行 Windows 的 EC2 執行個體上執行核心層級偵錯。
核心偵錯可協助您診斷和疑難排解低階作業系統問題,例如 EC2 Windows 執行個體上的藍螢幕錯誤 (BSODs)、驅動程式故障和開機問題。
先決條件
開始前,請確定您具有下列項目:
兩個 EC2 Windows 執行個體,位於相同的子網路中:
-
除錯主機執行個體 — 執行 Windows Debugger (WinDbg)。
-
偵錯目標執行個體:您要偵錯的執行個體。
如需啟動執行個體的詳細資訊,請參閱 開始使用 Amazon EC2。
主機和目標執行個體的安全群組必須允許用於 KDNET 除錯的連接埠上的傳入和傳出 UDP 流量 (建議範圍:50000–50039)。設定此項目最簡單的方法是建立具有傳入規則的安全群組,允許來自自身的 UDP 流量做為來源,然後將該安全群組連接至這兩個執行個體。如需詳細資訊,請參閱「Amazon VPC 使用者指南」中的安全群組規則。
除錯目標執行個體必須執行下列其中一個 Windows 版本 (或更新版本):
-
建置編號為 26100.7462 的 Windows Server 2025 (2025 年 12 月修補程式)
-
Windows 11 24H2,建置編號為 26100.7309
-
Windows 11 25H2,建置編號為 26200.7309
注意
ENA 的 KDNET 擴充性模組是做為 Windows 的一部分分佈,只能透過 Windows 每月累積更新進行更新。我們建議您將最新的 Windows KB 安裝在偵錯目標上,以確保您擁有最新版本的 Windows KB。
若要驗證偵錯目標上是否存在模組,請在提升的 PowerShell 工作階段中執行下列命令:
Test-Path C:\Windows\system32\kd_02_1d0f.dll
如果命令傳回 True,表示模組可用。
步驟 1:在偵錯主機上安裝 Windows 偵錯工具
在 PowerShell 工作階段中執行下列命令,在偵錯主機執行個體上安裝 Windows 偵錯工具:
winget install microsoft.windbg
如需詳細安裝說明,請參閱 Microsoft 文件中的安裝 Windows Debugger
安裝之後,請在 PowerShell 工作階段中執行下列命令,確認偵錯工具是否正常運作:
windbgx
WinDbg 視窗應開啟。如果安裝成功,您可以關閉視窗。
步驟 2:設定偵錯目標
注意
當核心偵錯作用中時,用於偵錯工作階段的 ENA 裝置專用於偵錯工具流量。如果您需要在偵錯期間維持偵錯目標執行個體上的網際網路存取,請在開始之前將第二個 ENA 連接到執行個體。
在偵錯目標上,開啟提升的 PowerShell 工作階段,並使用下列步驟設定核心偵錯。
執行下列命令,列出連接至執行個體之 ENA 轉接器的匯流排、裝置和函數編號:
Get-NetAdapter -Physical | Where-Object -Property PnPDeviceID -Match -Value '^PCI\\VEN_1D0F&DEV_EC2[01]&' | Get-NetAdapterHardwareInfo | Select-Object InterfaceDescription, BusNumber, DeviceNumber, FunctionNumber | Format-List
如果執行個體連接多個 ENA 轉接器,請使用下列命令,將每個實體轉接器映射至其私有 IP 地址。您可以在 EC2 → 執行個體 → 【執行個體 ID】 → 網路 → 網路界面 AWS 管理主控台 下的 中交叉參考這些詳細資訊。這可協助您將特定網路介面 IDs、私有 IPs和安全群組與 OS 層級轉接器建立關聯,以進行目標偵錯。
Get-NetAdapter -Physical | Where-Object PnPDeviceID -Match '^PCI\\VEN_1D0F&DEV_EC2[01]&' | ForEach-Object { $adapter = $_ $hwInfo = $adapter | Get-NetAdapterHardwareInfo $ipInfo = Get-NetIPAddress -InterfaceIndex $adapter.InterfaceIndex -AddressFamily IPv4 [PSCustomObject]@{ InterfaceDescription = $adapter.InterfaceDescription IPAddress = $ipInfo.IPAddress BusNumber = $hwInfo.BusNumber DeviceNumber = $hwInfo.DeviceNumber FunctionNumber = $hwInfo.FunctionNumber } } | Format-List
請注意用於從輸出除錯的 ENA 轉接器的 BusNumberDeviceNumber、 和 FunctionNumber值。
執行下列命令來設定核心偵錯。將預留位置值取代為您的特定組態:
bcdedit /debug on bcdedit /set loadoptions FORCEHVTONOTSHAREDEBUGDEVICE bcdedit /dbgsettings net hostip:host-private-ipport:port-numberkey:encryption-keybusparams:b.d.f
注意
執行下列命令loadoptions來檢查是否存在 。如果傳回值,請複製該字串並附加;FORCEHVTONOTSHAREDEBUGDEVICE至該字串。
(bcdedit /enum) -match "loadoptions"
其中:
-
host-private-ip— 除錯主機執行個體的私有 IPv4 地址。如果您的執行個體是在IPv6-only的子網路中啟動,請參閱 Microsoft 文件中的使用 IPv6 設定KDNET,以進一步了解搭配 KDNET 使用 IPv6。 -
port-number— 用於偵錯工作階段的連接埠。建議範圍為 50000–50039 (例如50000)。 -
encryption-key— 用於加密偵錯連線的 256 位元金鑰,指定為以句點分隔的四個 64 位元值。每個 64 位元值的長度上限為 13 個字元,只使用小寫字母 a–z 和數字 0–9。不允許使用特殊字元。加密金鑰範例:1kdnet2keys3.4kdnet5keys6.7kdnet8keys9.10kdnet11ke。 -
b.d.f— ENA 裝置的匯流排、裝置和函數編號,格式為bus.device.function(例如0.3.0),用於偵錯。
提示
若要偵錯 Windows 開機程序,請同時執行下列命令:
bcdedit /bootdebug on
步驟 3:在偵錯主機上啟動偵錯工作階段
若要允許偵錯主機上的流量,您可以為 WinDbg 應用程式或特定 UDP 連接埠建立防火牆規則。
選項 1:允許 WinDbg 應用程式
執行下列命令來授權 WinDbg 可執行檔:
$WinDbgxPath = "$env:LocalAppData\Microsoft\WindowsApps\WinDbgX.exe" New-NetFirewallRule -DisplayName "Allow Inbound KDNET Connection" -Action Allow -Program $WinDbgxPath
選項 2:允許特定的 UDP 連接埠
或者,您可以允許傳入 UDP 流量到為核心偵錯設定的連接埠。以您選擇的 KDNET 連接埠取代 port-number:
$DebugPort =port-numberNew-NetFirewallRule -DisplayName "Allow Inbound KDNET Connection" -Direction Inbound -LocalPort $DebugPort -Protocol UDP -Action Allow
注意
防火牆組態可能受到網域群組政策 (GPO) 的限制,或需要更高的管理員許可。如果命令失敗,請聯絡您的網路管理員。
使用符合偵錯目標組態的連接埠和金鑰啟動 WinDbg。您可以指定 Microsoft WinDbg 命令列參考
windbgx -k net:port=port-number,key=encryption-key
WinDbg 會開啟並等待偵錯目標連線。
步驟 4:重新啟動偵錯目標
在偵錯目標上,重新啟動執行個體以啟動偵錯連線:
shutdown -r -t 0
偵錯目標重新啟動後,偵錯主機上的 WinDbg 會自動連線到目標。您現在可以使用 WinDbg 來檢查核心狀態、設定中斷點,以及診斷問題。
偵錯後清除偵錯設定
在偵錯目標上
完成偵錯後,請從偵錯目標移除核心偵錯組態,以還原正常的開機行為。在偵錯目標上,開啟提升的 PowerShell 工作階段並執行下列命令:
bcdedit /debug off bcdedit /dbgsettings LOCAL bcdedit /deletevalue loadoptions
如果您有 loadoptions 以外的現有 FORCEHVTONOTSHAREDEBUGDEVICE,您應該bcdedit /set loadoptions使用原始 執行 來還原設定loadoptions。
如果您已啟用開機偵錯,也請執行:
bcdedit /bootdebug off
重新啟動執行個體,讓變更生效。
在偵錯主機上
執行下列動作以移除防火牆規則:
Remove-NetFirewallRule -DisplayName "Allow Inbound KDNET Connection"
限制
ENA 的 KDNET 擴充功能模組目前不支援:
-
第 8 代非金屬 x86_64 執行個體類型 (例如
m8a.xlarge) -
第 7 代 48xlarge 非金屬 x86_64 執行個體類型 (例如
m7a.48xlarge) -
u7i 執行個體類型
模組目前不支援啟用安全開機的執行個體。您可以在提升的 PowerShell 工作階段Confirm-SecureBootUEFI中執行 驗證狀態。如果輸出為 True,則安全開機為作用中。請注意,根據預設,具有「TPM」字首的所有 Amazon 提供的映像都已啟用安全開機。
其他備註
如果您在將除錯器連線至目標執行個體時遇到問題,請確認下列事項:
-
符合本指南中列出的所有先決條件,包括所需的 Windows Server 建置版本和可擴展性模組的存在。
-
連接到兩個執行個體的安全群組已正確設定,以允許它們之間在設定的偵錯連接埠上的流量。
-
主機執行個體上的 Windows 防火牆規則不會封鎖已設定連接埠上兩個執行個體之間的網路流量。
如需其他指引,請參閱 Microsoft 文件中的手動設定 KDNET 網路核心偵錯