

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

# 透過網路對 Windows 執行個體進行核心除錯
<a name="troubleshoot-windows-with-kdnet"></a>

KDNET 彈性網路轉接器擴充性模組 (ENA) 是一種硬體驅動程式支援層，可透過 Amazon Elastic Compute Cloud 執行個體上的 ENA 透過網路進行 Windows 核心偵錯。您可以使用擴充模組搭配 Windows Debugger (WinDbg)，在執行 Windows 的 EC2 執行個體上執行核心層級偵錯。

核心偵錯可協助您診斷和疑難排解低階作業系統問題，例如 EC2 Windows 執行個體上的藍螢幕錯誤 (BSODs)、驅動程式故障和開機問題。

**Topics**
+ [先決條件](#kdnet-prerequisites)
+ [步驟 1：在偵錯主機上安裝 Windows 偵錯工具](#kdnet-step1-install-debugging-tools)
+ [步驟 2：設定偵錯目標](#kdnet-step2-setup-debug-target)
+ [步驟 3：在偵錯主機上啟動偵錯工作階段](#kdnet-step3-start-debugging-session)
+ [步驟 4：重新啟動偵錯目標](#kdnet-step4-reboot-debug-target)
+ [偵錯後清除偵錯設定](#kdnet-clean-up)
+ [限制](#kdnet-limitations)
+ [其他備註](#kdnet-additional-notes)

## 先決條件
<a name="kdnet-prerequisites"></a>

開始前，請確定您具有下列項目：

兩個 EC2 Windows 執行個體，位於相同的子網路中：
+ 除**錯主機**執行個體 — 執行 Windows Debugger (WinDbg)。
+ **偵錯目標**執行個體：您要偵錯的執行個體。

如需啟動執行個體的詳細資訊，請參閱 [開始使用 Amazon EC2](EC2_GetStarted.md)。

主機和目標執行個體的安全群組必須允許用於 KDNET 除錯的連接埠上的傳入和傳出 UDP 流量 （建議範圍：50000–50039)。設定此項目最簡單的方法是建立具有傳入規則的安全群組，允許來自自身的 UDP 流量做為來源，然後將該安全群組連接至這兩個執行個體。如需詳細資訊，請參閱「Amazon VPC 使用者指南」**中的[安全群組規則](https://docs.aws.amazon.com/vpc/latest/userguide/security-group-rules.html)。

除錯目標執行個體必須執行下列其中一個 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 偵錯工具
<a name="kdnet-step1-install-debugging-tools"></a>

在 PowerShell 工作階段中執行下列命令，在偵錯主機執行個體上安裝 Windows 偵錯工具：

```
winget install microsoft.windbg
```

如需詳細安裝說明，請參閱 Microsoft 文件中的[安裝 Windows Debugger](https://learn.microsoft.com/en-us/windows-hardware/drivers/debugger/)。

安裝之後，請在 PowerShell 工作階段中執行下列命令，確認偵錯工具是否正常運作：

```
windbgx
```

WinDbg 視窗應開啟。如果安裝成功，您可以關閉視窗。

## 步驟 2：設定偵錯目標
<a name="kdnet-step2-setup-debug-target"></a>

**注意**  
當核心偵錯作用中時，用於偵錯工作階段的 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 轉接器連接到執行個體
<a name="kdnet-multiple-ena-adapters"></a>

如果執行個體連接多個 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 轉接器的 `BusNumber``DeviceNumber`、 和 `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 設定](https://learn.microsoft.com/en-us/windows-hardware/drivers/debugger/setting-up-a-network-debugging-connection#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：在偵錯主機上啟動偵錯工作階段
<a name="kdnet-step3-start-debugging-session"></a>

若要允許偵錯主機上的流量，您可以為 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 命令列參考](https://learn.microsoft.com/en-us/windows-hardware/drivers/debuggercmds/windbg-command-line-preview#kernel-options)中記錄的其他核心偵錯選項，以符合您的使用案例。

```
windbgx -k net:port=port-number,key=encryption-key
```

WinDbg 會開啟並等待偵錯目標連線。

## 步驟 4：重新啟動偵錯目標
<a name="kdnet-step4-reboot-debug-target"></a>

在偵錯目標上，重新啟動執行個體以啟動偵錯連線：

```
shutdown -r -t 0
```

偵錯目標重新啟動後，偵錯主機上的 WinDbg 會自動連線到目標。您現在可以使用 WinDbg 來檢查核心狀態、設定中斷點，以及診斷問題。

## 偵錯後清除偵錯設定
<a name="kdnet-clean-up"></a>

**在偵錯目標上**  
完成偵錯後，請從偵錯目標移除核心偵錯組態，以還原正常的開機行為。在偵錯目標上，開啟提升的 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"
```

## 限制
<a name="kdnet-limitations"></a>

ENA 的 KDNET 擴充功能模組目前不支援：
+ 第 8 代非金屬 x86\$164 執行個體類型 （例如 `m8a.xlarge`)
+ 第 7 代 48xlarge 非金屬 x86\$164 執行個體類型 （例如 `m7a.48xlarge`)
+ u7i 執行個體類型

模組目前不支援啟用安全開機的執行個體。您可以在提升的 PowerShell 工作階段`Confirm-SecureBootUEFI`中執行 驗證狀態。如果輸出為 `True`，則安全開機為作用中。請注意，根據預設，具有「TPM」字首的所有 Amazon 提供的映像都已啟用安全開機。

## 其他備註
<a name="kdnet-additional-notes"></a>

如果您在將除錯器連線至目標執行個體時遇到問題，請確認下列事項：
+ 符合本指南中列出的所有先決條件，包括所需的 Windows Server 建置版本和可擴展性模組的存在。
+ 連接到兩個執行個體的安全群組已正確設定，以允許它們之間在設定的偵錯連接埠上的流量。
+ 主機執行個體上的 Windows 防火牆規則不會封鎖已設定連接埠上兩個執行個體之間的網路流量。

如需其他指引，請參閱 Microsoft 文件中的[手動設定 KDNET 網路核心偵錯](https://learn.microsoft.com/en-us/windows-hardware/drivers/debugger/setting-up-a-network-debugging-connection)。