共用方式為


使用虛擬 COM 埠手動設定虛擬機的核心模式偵錯

適用於 Windows 的偵錯工具支援虛擬機的核心偵錯。 虛擬機可以位於與調試程式相同的實體計算機上,或位於連線至相同網路的不同計算機上。 本主題描述如何透過 KDCOM 使用虛擬 COM 埠手動設定虛擬機的偵錯。

使用 KDNET 虛擬網路是較快的選項,建議使用。 如需詳細資訊,請參閱 使用 KDNET 設定虛擬機的網路偵錯。

設定目標虛擬機

執行調試程式的計算機稱為 主計算機,而所偵錯的虛擬機稱為 目標虛擬機

重要

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

  1. 在虛擬機中,於提升許可權的 [命令提示字元] 視窗中,輸入下列命令。

    bcdedit /debug on

    bcdedit /dbgsettings serial debugport:n baudrate:115200

    其中 n 是虛擬機上的 COM 埠數目。

  2. 在虛擬機中,設定 COM 埠以對應至命名管道。 調試程式會透過此管道連接。 如需如何建立此管道的詳細資訊,請參閱虛擬機的檔。

  3. 以提升許可權模式啟動調試程式,例如,從系統管理員命令提示字元啟動調試程式。 調試程式必須在透過序列管道對 VM 進行偵錯時,以提升許可權模式執行。 調試程式連結並執行之後,請重新啟動目標 VM。

使用 WinDbg 啟動偵錯會話

在主計算機上,以系統管理員身分開啟 WinDbg。 調試程式必須在透過序列管道對 VM 進行偵錯時,以提升許可權模式執行。 在 [檔案] 功能表上,選擇 [核心偵錯]。 在 [核心偵錯] 對話框中,開啟 [COM] 索引卷標。核取 [管道] 方塊,然後核取 [重新連線] 方塊。 針對 [包率],輸入 115200。 針對 [ 重設],輸入 0。

如果調試程式與虛擬機在同一部計算機上執行,請在 [埠] 中輸入下列命令

\\.\pipe\PipeName

如果調試程式正在與虛擬機不同的計算機上執行,請輸入下列專案作為 [埠]。

\\VMHost\pipe\PipeName

選取 [確定]。

您也可以在命令行啟動 WinDbg。 如果調試程式在與虛擬機相同的實體計算機上執行,請在 [命令提示字元] 視窗中輸入下列命令。

windbg -k com:pipe,port=\.\pipe\PipeName,resets=0,reconnect

如果調試程式是在虛擬機的不同實體計算機上執行,請在 [命令提示字元] 視窗中輸入下列命令。

windbg -k com:pipe,port=\\VMHost\pipe\PipeName,resets=0,reconnect

使用 KD 啟動偵錯會話

若要偵錯在與調試程式相同的實體計算機上執行的虛擬機,請在提升許可權的命令提示字元視窗中輸入下列命令

kd -k com:pipe,port=\.\pipe\PipeName,resets=0,reconnect

若要偵錯在調試程式的不同實體計算機上執行的虛擬機,請在 [命令提示字元] 視窗中輸入下列命令。

kd -k com:pipe,port=\\VMHost\pipe\PipeName,resets=0,reconnect

參數

VMHost
指定虛擬機執行的電腦名稱。

PipeName
指定您在虛擬機上建立的管道名稱。

resets=0
指定當主機和目標正在同步處理時,可以傳送無限數量的重設封包到目標。 將 resets=0 參數用於Microsoft虛擬電腦和其他管線捨棄過多位元組的虛擬機。 請勿將此參數用於管線不會卸除所有多餘的位元組的 VMware 或其他虛擬機。

重新
如果發生讀取/寫入失敗,調試程式會自動中斷連線,並重新連接管道。 此外,如果調試程式在啟動調試程式時找不到命名管道, 重新 連接參數會讓調試程式等候名為 PipeName 的管道出現。 針對虛擬電腦和其他在電腦重新啟動期間終結並重新建立其管道的虛擬機,請使用 重新 連線。 請勿將此參數用於 VMware 或其他在電腦重新啟動期間保留其管道的虛擬機。

如需其他命令行選項的詳細資訊,請參閱 KD 命令行選項WinDbg 命令行選項

第 2 代 虛擬機器

根據預設,COM 埠不會出現在第 2 代虛擬機中。 您可以透過PowerShell或 WMI 新增 COM 連接埠。 若要讓 COM 埠顯示在 Hyper-V 管理員控制台中,必須使用路徑建立它們。

若要在第 2 代虛擬機上使用 COM 埠啟用核心偵錯,請遵循下列步驟:

  1. 輸入下列 PowerShell 命令來停用安全開機:

    Set-VMFirmware –Vmname VmName –EnableSecureBoot Off

    其中 VmName 是虛擬機的名稱。

  2. 輸入下列 PowerShell 命令,將 COM 連接埠新增至虛擬機:

    Set-VMComPort –VMName VmName 1 \\.\pipe\PipeName

    例如,下列命令會設定虛擬機 TestVM 上的第一個 COM 連接埠,以連線到本機電腦上的命名管道 TestPipe。

    Set-VMComPort –VMName TestVM 1 \\.\pipe\TestPipe

  3. 調試程式連結並執行之後,請停止並冷啟動 VM,以啟動 VM 中的 COM 連接埠。 除非至少有一個使用管道名稱設定,否則仿真的 UARTS 無法進行偵錯,而且無法進行熱新增。

  4. 重新啟用安全開機,一旦您完成更新組態變更。

如需第 2 代 VM 的詳細資訊,請參閱 第 2 代虛擬機概觀

言論

如果目標計算機已停止響應,目標計算機仍會因為先前的核心偵錯動作而停止,或者您使用 了 -b 命令行選項,調試程式會立即中斷至目標計算機。

否則,目標計算機會繼續執行,直到調試程式命令中斷為止。

針對防火牆和網路存取問題進行疑難解答

您的調試程式 (WinDbg 或 KD) 必須可透過防火牆存取。 即使是網路適配器所支援的虛擬序列埠也是如此。

如果 Windows 提示您在載入除錯程式時關閉防火牆,請選取這三個方塊。

視使用中的 VM 細節而定,您可能需要變更虛擬機的網路設定,以將它們橋接至Microsoft核心網路適配器。 否則,虛擬機將無法存取網路。

Windows 防火牆

您可以使用 控制台 來允許透過 Windows 防火牆進行存取。 開啟 控制台 > [系統和安全性],然後選取 [允許應用程式通過 Windows 防火牆]。 在應用程式清單中,找出 Windows GUI 符號調試程式和 Windows 核心調試程式。 使用複選框允許這兩個應用程式通過防火牆。 重新啟動偵錯應用程式 (WinDbg 或 KD)。

第三方 VM

VMWare 如果您使用 VMWare 設備重新啟動虛擬機(例如重設按鈕),請結束 WinDbg,然後重新啟動 WinDbg 以繼續偵錯。 在虛擬機偵錯期間,VMWare 通常會耗用 100% 的 CPU。

另請參閱

使用 KDNET 設定虛擬機的網路偵錯

手動設定核心模式偵錯

設定虛擬機主機的網路偵錯