本文說明如何使用適用於 Windows 的偵錯工具手動設定 KDNET 網路核心偵錯。 您可以設定主機和目標電腦來啟用網路偵錯。
重要
手動網路調試設定複雜且容易出錯。 在大部分的案例中,請改用自動設定:自動設定 KDNET 網路核心偵錯。 強烈建議使用 KDNET 公用程式。
您將學到:
- 如何設定主機和目標電腦以進行網路偵錯
- 如何建立偵錯連線並進行疑難排解
- 何時使用 IPv6 與 IPv4 進行偵錯
執行除錯程式的電腦稱為 主電腦,而偵錯的電腦稱為 目標電腦。 主機電腦必須執行 Windows 7 或更新版本,而目標電腦必須執行 Windows 8 或更新版本。
相較於對其他類型的連線進行偵錯,透過網路進行偵錯具有下列優點。
- 主機和目標計算機可以是局域網路上的任何位置。
- 從一部主計算機對許多目標計算機進行偵錯很容易。
- 假設有任兩部計算機,很可能兩部計算機都有乙太網路卡。 它們同時擁有序列埠或 1394 埠的可能性較小。
- 網路偵錯比序列埠偵錯更快。
支援的網路適配器
主機: 任何網路介面卡都可以運作。
目標電腦: 必須使用支援的網路介面卡。 檢查您的 Windows 版本:
安裝適用於 Windows 的偵錯工具
確認 Windows 的偵錯工具已安裝在主機系統上。 如需下載及安裝除錯程式工具的相關資訊,請參閱 Windows 偵錯工具。
判斷主計算機的IP位址
使用下列其中一個程式來判斷主計算機的IP位址。
在主電腦上,開啟命令提示字元,然後輸入下列命令:
ipconfig記下您要用於偵錯之網路適配器的 IPv4 位址。
在目標計算機上,開啟命令提示字元並輸入下列命令,其中 YourIPAddress 是主電腦的 IP 位址:
ping -4 <YourIPAddress>
選擇網路偵錯的埠
推薦連接埠範圍: 50000-50039
您可以使用 49152-65535 之間的任何端口,但建議的範圍可提供最佳相容性。 偵錯工具會獨佔使用此埠,因此請確定沒有其他應用程式使用它。
重要考慮
- 公司防火牆可能會限制連接埠範圍。 請洽詢您的網路管理員。
- 每台目標電腦都需要一個唯一的連接埠(例如:50000、50001、50002)。
- 不同的主機可以重複使用相同的連接埠範圍。
注意
您公司的網路原則可能會限制可用的連接埠。 如果您遇到連線問題,請諮詢您的網路管理員。
如果您將數部目標計算機連線到單一主計算機,則每個連線都必須有唯一的埠號碼。 例如,如果您將 100 部目標電腦連線到單一主計算機,您可以將埠 50000 指派給第一個連線、埠 50001 指派給第二個連線等等。
注意
不同的主機可以使用相同範圍的埠 (50000 到 50099) 來連線到另外 100 部目標電腦。
設置目標電腦
確認目標電腦具有支援的網路適配器。 如需詳細資訊,請參閱:
Windows 8.1 中支持網路核心偵錯的乙太網路 NIC
Windows 10 中支持網路核心偵錯的乙太網路 NIC
使用適當的網路纜線,將支援的介面卡連接至網路中樞或交換器。
重要
使用 BCDEdit 變更開機資訊之前,您可能需要暫時暫停測試電腦上的 Windows 安全性功能,例如 BitLocker 和安全開機。 在測試完成時重新啟用這些安全性功能,並在停用安全性功能時適當地管理測試計算機。
在提升權限的命令提示字元中,輸入下列命令。 將 w.x.y.z 替換為主機的 IP 地址,並將 n 替換為您選擇的端口號:
bcdedit /debug on bcdedit /dbgsettings net hostip:w.x.y.z port:n例如:
bcdedit /debug on bcdedit /dbgsettings net hostip:192.168.1.100 port:50000BCDEdit 會顯示自動產生的金鑰。 複製金鑰,並將其儲存在抽取式儲存設備上,例如 USB 快閃磁碟驅動器。 當您在主電腦上啟動偵錯工作階段時,您需要金鑰。
使用設備管理員來判斷您要用於偵錯之適配卡的PCI總線、裝置和函式號碼。 這些值會顯示在 [設備管理器] 中 [位置 ] 下的 [一般] 標籤上。然後在具有管理員權限的命令提示字元中,輸入下列命令,其中 b、d,以及 f 是配接器的總線號碼、裝置號碼和功能號碼:
bcdedit /set "{dbgsettings}" busparams b.d.f在連結核心偵錯工具之後,目標電腦會重新啟動。
注意
如果您要在目標電腦上安裝 Hyper-V 角色,請參閱 設定虛擬機器主機的網路偵錯。
謹慎
如果您的目標電腦位於擴充基座中,而且您為屬於擴充基座一部分的網路介面卡啟用網路偵錯,請勿從擴充基座移除電腦。 如果您需要從停駐站移除目標計算機,請先停用核心偵錯。 若要停用目標電腦上的內核偵錯,請以系統管理員身分開啟命令提示字元,然後輸入命令 bcdedit /debug off。 重新啟動目標計算機。
啟動偵錯會話
開始之前: 確保主機的網路介面卡已連接到網路集線器或交換器。
選項 1:使用 WinDbg (GUI)
- 在主機上開啟 WinDbg。
- 選擇 檔案>核心偵錯。
- 開啟 網路 標籤。
- 輸入您的連接埠號碼和金鑰。
- 選擇確定。
選項 2:使用 WinDbg (命令列)
您也可以開啟命令提示字元並輸入下列命令,以啟動 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 要求,則在 Ping 主機時不會收到任何回應。
調試程式如何取得目標計算機的IP位址
目標電腦上的 KDNET 會嘗試使用動態主機設定通訊協定 (DHCP) 來取得用於偵錯之網路介面卡的可路由 IP 位址。 如果 KDNET 取得 DHCP 指派的位址,則網路上任何位置的主機電腦都可以偵錯目標電腦。 如果 KDNET 無法取得 DHCP 指派的位址,它會使用自動私人 IP 定址 (APIPA) 來取得本機連結 IP 位址。 本機連結IP位址無法路由傳送,因此主機和目標無法使用本機連結IP位址透過路由器進行通訊。 在此情況下,如果您將主機和目標電腦插入相同的網路中樞或交換器,網路偵錯就會運作。
在實體機上的 PCI 型 NIC 上設定 KDNET 時,務必要指定 busparams。
如果您要在具有 PCI 或 PCIe 型 NIC 的實體電腦上設定 KDNET,請務必指定您要用於 KDNET 之 NIC 的匯流排參數。 若要指定總線參數,請開啟設備管理器,並找出您要用於偵錯的網路適配器。 開啟網路介面卡的屬性頁面,並記下出現在 [一般] 索引標籤上 [位置] 底下的匯流排號碼、裝置號碼和功能號碼。在提高許可權的命令提示字元中,輸入下列命令,其中 b、d 和 f 是十進位格式的匯流排、裝置和函式號碼:
bcdedit /set "{dbgsettings}" busparams b.d.f
當偵錯工具在主機上執行並等候連線時,請使用下列命令重新啟動目標電腦:
shutdown -r -t 0
手動刪除 BCDEdit 條目
您通常不需要手動刪除 BCDEdit 項目。 不過,您可以使用此程序來除錯異常情況。
使用 kdnet 公用程式時,您不需要手動刪除項目。 如需詳細資訊,請參閱 設定 KDNET 網路核心偵錯自動設定。
當您使用 bcdedit –deletevalue時,您必須提供有效的 bcd 元素名稱。 如需詳細資訊,請參閱 BCDEdit /deletevalue。
若要手動刪除 bcdedit 專案,請完成下列步驟:
在目標計算機上,以系統管理員身分開啟命令提示字元。
例如,輸入下列命令來刪除主機 IP 位址的 BCDEdit 偵錯項:
bcdedit -deletevalue {dbgsettings} hostip
當您刪除 hostip 時,必須在調試程式命令行上指定 target=。
另一個範例是使用下列命令刪除埠條目:
bcdedit -deletevalue {dbgsettings} port
當您刪除埠設定時,KDNET 會使用 ICANN 註冊的預設偵錯工具埠 5364。
設定 Hyper-V
如果您想要在目標電腦上安裝 Hyper-V 角色,請參閱 設定虛擬機器主機的網路偵錯。
如需偵錯 Hyper-V 虛擬機(VM)的資訊,請參閱 設定虛擬機的網路偵錯 - KDNET。
在執行具有外部網路連線之 VM 的 Hyper-V 主機上啟用 KDNET
有時,會發生某些情況導致 VM 中的網路停止運作:
您可以在電腦上啟用 Hyper-V,建立指向電腦中實體 NIC 的外部網路交換器,並將虛擬機器設定為使用該外部交換器進行網路。
您可以使用外部網路交換器指向的相同實體 NIC,在 Hyper-V 主機作業系統上啟用 KDNET。 您重新啟動主機。
所有使用先前設定的外部交換器的虛擬機器都會在重新開機後失去其網路連線。
這種停止是設計使然。 KDNET 會獨佔控制其設定為使用的 NIC。 OS 不會載入該 NIC 的原生 NDIS 迷你埠。 外部網路交換器無法再與原生 NDIS 迷你埠驅動程式通訊,並停止運作。 若要解決此狀況,請完成下列步驟:
從 Hyper-V Manager 開啟 Virtual Switch Manager,然後選取現有的虛擬交換器。 變更外部網路 NIC 為 Microsoft 核心偵錯網路介面卡,方法是先從下拉功能表中選取它,然後在[虛擬交換器管理員] 對話方塊中按一下 [確定]。
更新虛擬交換器 NIC 之後,請關閉 VM 並重新啟動。
當您關閉 KDNET 偵錯時,請遵循相同的程式,將外部交換器重新指向 NIC 的原生 NDIS 迷你埠。 否則,當您在停用偵錯後重新啟動電腦時,虛擬機器連線會遺失。
IPv6
Windows 版本 1809 新增了對 IPv6 的支援。
若要搭配調試程式使用 IPv6,請完成下列步驟:
ping <debughostname>,並記下回復行中報告的 IPv6 位址。 使用此 IPv6 位址取代
x:y:z:p:d:q:r:n。使用 BCDEdit 刪除 dbgsettings 中的任何現有 IP 位址值。
bcdedit -deletevalue {dbgsettings} hostip設定主機的 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>輸入此命令以確認 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.在主電腦上,使用下列命令啟動除錯程式:
Windbg -k net:port=<yournetworkportnumber>,key=<key_output_from_kdnet>,target=::<YourIPv6Address>當調試程式在主計算機上執行並等候連線時,請重新啟動目標計算機。
偵錯工具會在開機期間儘早連線到主機偵錯工具。 您可以看到 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,您也不會取得連線。
相關內容
Windows 10 中支持網路核心偵錯的乙太網路 NIC
Windows 8.1 中支持網路核心偵錯的乙太網路 NIC