View a markdown version of this page

透過網路對 Windows 執行個體進行核心除錯 - Amazon Elastic Compute Cloud

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

透過網路對 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-ip port:port-number key:encryption-key busparams: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-number New-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 網路核心偵錯