手動設定 KDNET 網路核心偵錯

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

重要

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

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

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

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

支援的網路適配器

主計算機可以使用任何網路適配器,但目標計算機必須使用 Windows 偵錯工具支援的網路適配器。 如需支援的網路適配器清單,請參閱 Windows 10 中支援網路核心偵錯的乙太網路 NIC 和 Windows 8.1 中網路核心偵錯支援的乙太網路 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. 確認目標電腦具有支援的網路適配器。 如需詳細資訊,請參閱

  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總線、裝置和函式號碼。 這些值會顯示在 [一般] 索引標籤的 [位置] 底裝置管理員。然後在提升許可權的命令提示字元中,輸入下列命令,其中 bdf 是配接器的總線號碼、裝置號碼和函式號碼:

    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) (all)

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

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

加密金鑰

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

網路偵錯會使用 256 位索引鍵,在基底 36 中指定為四個 64 位值,並以句點分隔。 每個 64 位值最多會使用 13 個字元來指定。 有效字元是字母 az ,數位 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) (all)

  • (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。 若要指定總線參數,請開啟 裝置管理員,然後找出您要用於偵錯的網路適配器。 開啟網路適配器的屬性頁,並記下 [一般] 索引標籤上 [位置] 底下的總線號碼、裝置號碼和函式號碼。在提升許可權的命令提示字元中,輸入下列命令,其中 bdf 是十進位格式的總線、裝置和函式號碼:

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 會使用預設的 5364 調試程式埠。

設定 Hyper-V

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

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

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

有時候,會導致 VM 中的網路停止運作的情況:

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

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

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

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

  1. 從 Hyper-V 管理員開啟虛擬交換器管理員,然後選取現有的虛擬交換器。 從下拉功能表中選取外部網路 NIC,然後在 [虛擬交換器管理員] 對話框中選取 [確定],將外部網路 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 用於開機和核心偵錯
    targethostip 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 位址包含任何 . characters,調試程式會假設它是 IPv4 位址,並強制使用該連線的 IPv4。

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

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

另請參閱