共用方式為


手動設定 KDNET 網路核心調試

Windows 的偵錯工具支援透過網路進行核心偵錯。 本文說明如何手動設定網路偵錯。

重要

手動設定網路偵錯是複雜且易錯的流程。 若要自動設定網路偵錯,請參閱 自動設定 KDNET 網路核心偵錯。 強烈建議所有調試程式使用者使用 KDNET 公用程式。

執行除錯程式的電腦稱為 主電腦,而偵錯的電腦稱為 目標電腦。 主計算機必須執行 Windows 7 或更新版本,而且目標計算機必須執行 Windows 8 或更新版本。

相較於對其他類型的連線進行偵錯,透過網路進行偵錯具有下列優點。

  • 主機和目標計算機可以是局域網路上的任何位置。
  • 從一部主計算機對許多目標計算機進行偵錯很容易。
  • 假設有任兩部計算機,很可能兩部計算機都有乙太網路卡。 它們同時擁有序列埠或 1394 埠的可能性較小。
  • 網路偵錯比序列埠偵錯更快。

支援的網路適配器

主計算機可以使用任何網路適配器,但目標計算機必須使用 Windows 偵錯工具支援的網路適配器。 如需支援的網路適配器清單,請參閱 Windows 11 網路核心調試中的 支援乙太網路 NIC 和 Windows 10 網路核心調試中的 支援乙太網路 NIC

安裝適用於 Windows 的偵錯工具

確認 Windows 的偵錯工具已安裝在主機系統上。 如需下載及安裝除錯程式工具的相關資訊,請參閱 Windows 偵錯工具

判斷主計算機的IP位址

使用下列其中一個程式來判斷主計算機的IP位址。

  1. 在主電腦上,開啟命令提示字元,然後輸入下列命令:

    ipconfig
    

    記下您要用於偵錯之網路適配器的 IPv4 位址。

  2. 在目標計算機上,開啟命令提示字元並輸入下列命令,其中 YourIPAddress 是主電腦的 IP 位址:

    ping -4 <YourIPAddress>
    

選擇網路偵錯的埠

在主計算機和目標計算機上選擇偵錯的埠號碼。 您可以選擇 49152 到 65535 的任何數位。 建議的範圍是 50000 - 50039。 您所選擇的埠會由在主電腦上執行的調試程式開啟以供獨佔存取。 請謹慎選擇一個未被主機上執行的其他應用程式使用的端口號碼。

注意

可用於網路偵錯的埠號碼範圍可能會受限於貴公司的網路原則。 無法從主電腦得知限制是什麼。 若要判斷貴公司的原則是否限制可用於網路偵錯的埠範圍,請洽詢您的網路管理員。

如果您將數部目標計算機連線到單一主計算機,則每個連線都必須有唯一的埠號碼。 例如,如果您將 100 部目標電腦連線到單一主計算機,您可以將埠 50000 指派給第一個連線、埠 50001 指派給第二個連線等等。

注意

 不同的主計算機可以使用相同範圍的埠(50000 到 50099)連線到另外 100 部目標電腦。

設置目標電腦

  1. 確認目標電腦具有支援的網路適配器。 如需詳細資訊,請參閱:

    • Windows 8.1 中支持網路核心偵錯的乙太網路 NIC

    • Windows 10 中支持網路核心偵錯的乙太網路 NIC

  2. 使用適當的網路纜線,將支援的適配卡連線到網路中樞或交換器。

重要

使用 BCDEdit 變更開機資訊之前,您可能需要在測試電腦上暫時暫停 Windows 安全性功能,例如 BitLocker 和安全開機。 在測試完成時重新啟用這些安全性功能,並在停用安全性功能時適當地管理測試計算機。

  1. 在高權限命令提示字元中,輸入下列命令,其中 w.x.y.z 是主機的 IP 位址,n 是您所選擇的埠號碼:

    bcdedit /debug on
    
    bcdedit /dbgsettings net hostip:w.x.y.z port:n
    
  2. BCDEdit 會顯示自動產生的金鑰。 複製金鑰,並將其儲存在抽取式儲存設備上,例如 USB 快閃磁碟驅動器。 當您在主電腦上啟動偵錯工作階段時,您需要金鑰。

  3. 使用設備管理員來判斷您要用於偵錯之適配卡的PCI總線、裝置和函式號碼。 這些值會顯示在 [設備管理器] 中 [位置 ] 下的 [一般] 標籤上。然後在具有管理員權限的命令提示字元中,輸入下列命令,其中 bd,以及 f 是配接器的總線號碼、裝置號碼和功能號碼:

    bcdedit /set "{dbgsettings}" busparams b.d.f
    
  4. 連結核心調試程式之後,目標計算機將會重新啟動。

注意

如果您要在目標電腦上安裝 Hyper-V 角色,請參閱 設定虛擬機器主機的網路偵錯

注意 如果您的目標計算機位於停駐站,且您已針對屬於停駐站的網路適配器啟用網路偵錯,請勿從停駐站移除計算機。 如果您需要從停駐站移除目標計算機,請先停用核心偵錯。 若要停用目標電腦上的內核偵錯,請以系統管理員身分開啟命令提示字元,然後輸入命令 bcdedit /debug off。 重新啟動目標計算機。

啟動偵錯會話

確認主機電腦的網路適配器已使用合適的網路纜線連接到網路集線器或交換器。

在主計算機上,開啟 WinDbg。 在 [檔案] 功能表上,選取 [核心偵錯]。 在 [核心偵錯] 對話框中,開啟 [Net] 標籤。輸入您的埠號碼以及金鑰。 選取 [確定]

您也可以透過開啟命令提示字元並輸入下列命令來啟動 WinDbg 的會話,其中 n 是您的連接埠號碼,MyKey 是您設定目標電腦時 BCDEdit 自動產生的金鑰:

windbg -k net:port=<n>,key=<MyKey>

如果系統提示您允許 WinDbg 透過防火牆存取埠,請允許 WinDbg 存取不同網路類型的所有三個 埠。

使用 KD

在主計算機上,開啟命令提示字元。 輸入下列命令,其中 n 是埠號碼,MyKey 是您設定目標計算機時 BCDEdit 自動產生的密鑰:

kd -k net:port=<n>,key=<MyKey>

如果系統提示您允許 WinDbg 透過防火牆存取埠,請允許 WinDbg 存取 不同網路類型三個 的埠。

重新啟動目標計算機

** 一旦調試器已連線並處於待命狀態,請重新啟動目標電腦。 重新啟動電腦的方法之一,是從系統管理員的命令提示字元使用此命令:

shutdown -r -t 0

重新啟動目標時,主機OS中的調試程式應該會連線。

連接到主機上的目標後,在除錯器上中止程序,就可以開始偵錯。

允許調試程式通過防火牆

當您第一次嘗試建立網路偵錯連線時,系統可能會提示您允許偵錯應用程式 (WinDbg 或 KD) 透過防火牆存取。 用戶端版本的 Windows 會顯示提示,但 Windows 的伺服器版本不會顯示提示。 您應該勾選三個 網路類型的方塊,以回應提示:網域、私人和公用。

如果您沒有收到提示,或當提示可用時未核取方塊,您必須使用 [控制面板] 來允許在調試程序執行所在的主計算機上透過防火牆進行存取。 開啟 [控制面板] > [系統和安全性],然後選取 [[允許應用程式通過 Windows 防火牆]

  • (WinDbg)在應用程式清單中,找出 WinDbg 引擎程序(TCP)(全部)

  • (傳統 WinDbg)在應用程式清單中,找出 Windows GUI 符號調試程式Windows 核心調試程式

使用複選框允許這些應用程式通過防火牆。 重新啟動偵錯應用程式 (WinDbg 或 KD)。

加密金鑰

若要保護目標計算機的安全,必須在主計算機與目標計算機之間移動的封包加密。 您應該使用自動產生的加密金鑰(在設定目標電腦時由 BCDEdit 提供)。 建議使用自動產生的加密密鑰,因為它更安全,並提供唯一的值,用來建立特定目標的連線。

網路偵錯會使用 256 位索引鍵,在基底 36 中指定為四個 64 位值,並以句點分隔。 每個 64 位值最多會使用 13 個字元來指定。 有效字元是字母 z,以及數位 0 到 9。 不允許特殊字元。

若要指定您自己的金鑰,請在目標電腦上開啟提升許可權的命令提示字元。 輸入下列命令,其中 w.x.y.z 是主計算機的IP位址,n 是埠號碼,金鑰 是金鑰:

bcdedit /dbgsettings net hostip:w.x.y.z port:n key:Key

每當 dbgsettings 變更時,都必須重新啟動目標計算機。

疑難解答秘訣

必須允許偵錯應用程式通過防火牆

當您第一次嘗試建立網路偵錯連線時,系統可能會提示您允許偵錯應用程式 (WinDbg 或 KD) 透過防火牆存取。 用戶端版本的 Windows 會顯示提示,但 Windows 的伺服器版本不會顯示提示。 您應該勾選三個 網路類型的方塊,以回應提示:網域、私人和公用。

如果您沒有收到提示,或當提示可用時未核取方塊,您必須使用 [控制面板] 來允許透過防火牆進行存取。 開啟 [控制面板] > [系統和安全性],然後選取 [[允許應用程式通過 Windows 防火牆]

  • (WinDbg)在應用程式清單中,尋找 WinDbg 引擎進程(TCP)(全部)

  • (WinDbg(經典))在應用程式清單中,找出 Windows GUI 符號調試程式Windows 核心調試程式

使用複選框允許這些應用程式通過防火牆。 向下捲動並選取 [確定] 以儲存防火牆變更。 重新啟動調試程式。

埠號碼必須位於網路原則所允許的範圍內

可用於網路偵錯的埠號碼範圍可能會受限於貴公司的網路原則。 若要判斷貴公司的原則是否限制可用於網路偵錯的埠範圍,請洽詢您的網路管理員。 在目標電腦上,以系統管理員身分開啟命令提示字元,然後輸入命令 bcdedit /dbgsettings。 輸出會類似下列內容:

C:\> bcdedit /dbgsettings
key                     XXXXXX.XXXXX.XXXXX.XXXXX
debugtype               NET
hostip                  169.168.1.1
port                    50085
dhcp                    Yes
The operation completed successfully.

在上述輸出中,埠的值是 50085。 如果埠的值位於網路管理員允許的範圍之外,請輸入下列命令。 w.x.y.z 值 是主計算機的IP位址,YourDebugPort 是允許範圍的埠號碼。

bcdedit /dbgsettings net hostip:w.x.y.z port:YourDebugPort

變更目標計算機調試程式設定之後,請使用新的埠設定在主計算機上重新執行調試程式,然後重新啟動目標計算機。

使用 Ping 測試連線能力

如果調試程式未連線,請使用目標計算機上的 ping 命令來驗證連線能力。

C:\>Ping <HostComputerIPAddress>

注意

如果您的主計算機未設定為可在網路上探索,這可能無法運作,因為防火牆可能會封鎖 Ping 要求。 如果防火牆封鎖 Ping 要求,當您偵測主機時,將不會收到任何回應。

調試程式如何取得目標計算機的IP位址

目標電腦上的 KDNET 會嘗試使用動態主機設定通訊協定 (DHCP) 來取得用於偵錯之網路適配器的可路由 IP 位址。 如果 KDNET 取得 DHCP 指派的位址,則目標計算機可由網路上任何位置的主機電腦進行偵錯。 如果 KDNET 無法取得 DHCP 指派的位址,它會使用自動私人 IP 尋址 (APIPA) 來取得本機連結 IP 位址。 本機連結IP位址無法路由傳送,因此主機和目標無法使用本機連結IP位址透過路由器進行通訊。 在此情況下,如果您將主機和目標計算機插入相同的網路中樞或交換器,網路偵錯將會正常運作。

在實體機上的 PCI 型 NIC 上設定 KDNET 時,務必要指定 busparams。

如果您要在具有PCI或PCIe型 NIC 的實體電腦上設定 KDNET,您應該一律指定您想要用於 KDNET 之 NIC 的 busparams。 若要指定總線參數,請開啟設備管理器,並找出您要用於偵錯的網路適配器。 開啟網路適配器的屬性頁,並記下 [[一般] 索引標籤上 位置 底下顯示的總線號碼、裝置號碼和函式號碼。在提升許可權的命令提示字元中,輸入下列命令,其中 bd,以及 f 為總線、裝置和函式號碼,格式為十進位格式:

bcdedit /set "{dbgsettings}" busparams b.d.f

當除錯程式在主電腦上執行並等候連線時,請使用下列命令重新啟動目標電腦:

shutdown -r -t 0

手動刪除 BCDEdit 條目

手動刪除通常不是必要的,但這裡提供作為異常情況的疑難排解程序。

使用 kdnet 工具時,不需要手動刪除項目。 如需詳細資訊,請參閱 設定 KDNET 網路核心偵錯自動設定

當您使用 bcdedit –deletevalue時,您必須提供有效的 bcd 元素名稱。 如需詳細資訊,請參閱 BCDEdit /deletevalue

若要手動刪除 bcdedit 專案,請完成下列步驟:

  1. 在目標計算機上,以系統管理員身分開啟命令提示字元。

  2. 例如,輸入下列命令來刪除主機 IP 位址的 BCDEdit 偵錯項:

    bcdedit -deletevalue {dbgsettings} hostip
    

當您刪除 hostip 時,必須在調試程式命令行上指定 target=

  1. 另一個範例是使用下列命令刪除埠條目:

    bcdedit -deletevalue {dbgsettings} port
    

當您刪除埠設定時,KDNET 會使用 ICANN 註冊的預設偵錯工具埠 5364。

設定 Hyper-V

如果您要在目標電腦上安裝 Hyper-V 角色,請參閱 設定虛擬機器主機的網路偵錯

如需偵錯 Hyper-V 虛擬機(VM)的資訊,請參閱 設定虛擬機的網路偵錯 - KDNET

在執行具有外部網路連線之 VM 的 Hyper-V 主機上啟用 KDNET

有時,會發生某些情況導致 VM 中的網路停止運作:

  • Hyper-V 已在電腦上啟用,已建立外部網路交換器,並指向機器中的實體 NIC,且 VM 已設定為使用該外部交換器進行網路功能。

  • KDNET 接著會使用外部網路交換器所指向的相同實體 NIC,在 Hyper-V 主機 OS 上啟用。 主機重新啟動。

  • 所有使用先前設定外部交換器的 VM,在重新啟動後失去其網路連線能力。

此停止是設計而發生的,因為 KDNET 會完全控制其設定為使用的 NIC。 OS 不會載入該 NIC 的原生 NDIS 迷你埠。 然後,外部網路交換器無法再與原生 NDIS 迷你埠驅動程序通訊,並停止運作。 若要解決此問題,請執行下列動作:

  1. 從 Hyper-V Manager 開啟 Virtual Switch Manager,然後選取現有的虛擬交換器。 變更外部網路 NIC 為 Microsoft 核心偵錯網路介面卡,方法是先從下拉功能表中選取它,然後在[虛擬交換器管理員] 對話方塊中按一下 [確定]

  2. 更新虛擬交換器 NIC 之後,請關閉 VM 並重新啟動。

關閉 KDNET 偵錯時,必須遵循相同的程式,將外部交換器重新指向 NIC 的原生 NDIS 迷你埠。 否則,當機器在偵錯停用後重新啟動時,VM 連線就會遺失。

IPv6

Windows 1809 版已新增 IPv6 支援。

若要搭配調試程式使用 IPv6,請完成下列步驟:

  1. ping <debughostname>,並記下回復行中報告的 IPv6 位址。 使用此 IPv6 位址取代 x:y:z:p:d:q:r:n

  2. 使用 BCDEdit 刪除 dbgsettings 中的任何現有 IP 位址值。

    bcdedit -deletevalue {dbgsettings} hostip
    
  3. 設定主機的 IPv6 位址。 hostipv6=s:t:u:v:w:x:y:z 字串中不得有任何空格。 <YourPort> 是用於此目標電腦的網路埠號碼。 <YourKey> 是四部分的安全性密鑰。 <b.d.f> 是您想要用於 KDNET 之 NIC 的總線裝置功能位置號碼。

    bcdedit /dbgsettings net hostipv6:s:t:u:v:w:x:y:z port:<YourPort> key:<YourKey> busparams:<b.d.f>
    
  4. 輸入此命令以確認 dbgsettings 已正確設定。

    C:\> bcdedit /dbgsettings
    busparams               0.25.0
    key                     2steg4fzbj2sz.23418vzkd4ko3.1g34ou07z4pev.1sp3yo9yz874p
    debugtype               NET
    hostipv6                  2001:db8:0:0:ff00:0:42:8329
    port                    50010
    dhcp                    Yes
    The operation completed successfully.
    
  5. 在主電腦上,使用下列命令啟動除錯程式:

    Windbg -k net:port=<yournetworkportnumber>,key=<key_output_from_kdnet>,target=::<YourIPv6Address> 
    
  6. 當調試程式在主計算機上執行並等候連線時,請重新啟動目標計算機。

  7. 調試程式應該在開機期間早期連線到主機調試程式。 您可以看到 KDNET 正在使用 IPv6 連線,因為連線訊息中報告的 IP 位址是 IPv6 位址,而不是 IPv4 位址。

筆記

  • 允許指定 hostip 的每個偵錯工具 bcd 設定都有對應的 hostipv6 元素。 有三個。

    IPv4 IPv6 用法
    hostip hostipv6 用於開機和核心偵錯
    目標主機IP targethostipv6 僅供核心偵錯使用
    hypervisorhostip hypervisorhostipv6 針對 Hyper-V 調試
  • 如果您為任何這類偵錯設定 hostipv6 樣式位址,這表示您想要並取得 IPv6。

  • 如果您為任何這類偵錯設定 hostip 樣式位址,表示您想要並取得 IPv4。

  • 目標只會執行 IPv4 或 IPv6,而不是同時執行。 所使用的IP通訊協定版本是由目標計算機 dbgsettings 所控制。 如果已設定 hostip,則目標會使用 IPv4。 如果已設定 hostipv6,則目標會使用 IPv6。

  • 主機調試程式通常會自動選取 IPv4 或 IPv6 的使用方式。 根據預設,偵錯工具會同時監聽 IPv4 套接字和 IPv6 套接字,並自動連接到目標機器。

  • 如果您想要強制在主機上的調試程式中使用IPv6,但您想要調試程式接聽來自目標的連線,則可以將 target=:: 新增至調試程式命令行。 :: 是 0 的 IPv6 位址。

  • 如果您想要在主機上的調試程式中強制進行 IPv4 偵錯,但您想要調試程式接聽來自目標的連線,則可以將 target=0.0.0.0 新增至調試程式命令行。 0.0.0.0 是 0 的 IPv4 位址。

  • 如果您在調試程式命令行上指定 target= 並使用計算機名稱,調試程式會將該電腦名稱轉換成 IPv4 位址和 IPv6 位址。 然後調試程式會嘗試在兩者上連線。

  • 當您在調試程式命令行上指定 target= 並使用IP位址時,如果IP位址包含任何 字元,調試程式會假設它是IPv6位址,並強制使用該聯機的IPv6。 如果 IP 位址包含任何 字元,調試程式會假設它是 IPv4 位址,並強制使用該連線的 IPv4。

  • 如果您在目標上設定IPv6,並在調試程式命令行上強制使用IPv4,則不會取得連線。

  • 如果您在目標上設定 IPv4,並在調試程式命令行上強制使用 IPv6,您也不會取得連線。

另請參閱