共用方式為


使用虛擬 COM 埠手動設定虛擬機 Kernel-Mode 偵錯

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

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

設定目標虛擬機

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

重要

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

  1. 在虛擬機器中,於具有提升權限的命令提示字元視窗中,輸入下列命令。

    bcdedit /debug on

    bcdedit /dbgsettings serial debugport:nbaudrate:115200

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

  2. 在虛擬機中,設定 COM 埠以映射至命名管道。 調試程式會透過此管道連接。 如需有關如何建立此管線的詳細資訊,請參閱您的虛擬機器文件。

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

使用 WinDbg 啟動偵錯會話

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

如果除錯器與虛擬機在同一部計算機上執行,請在 Port輸入以下內容。

\\.\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,重新連接

參數

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

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

重置=0
指定當主機和目標正在同步處理時,可以傳送無限數量的重設封包到目標。 請使用 resets=0 參數來針對 Microsoft Virtual PC 和其他會丟棄多餘位元組的虛擬機器。 請勿將此參數用於 VMware 或其他虛擬機器中,其管道不會丟棄所有多餘的位元組。

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

如需其他命令行選項的詳細資訊,請參閱 KD Command-Line OptionsWinDbg Command-Line Options

第 2 代虛擬機

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

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

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

    Set-VMFirmware –VmnameVmName–EnableSecureBoot Off

    其中 VmName 是虛擬機的名稱。

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

    Set-VMComPort –VMNameVmName1 \\.\pipe\PipeName

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

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

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

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

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

備註

如果目標電腦已停止響應,目標電腦仍會因為先前的核心除錯動作而停止,或者您使用 -b命令列選項,調試程式會立即中斷並進入目標電腦。

否則,目標電腦會繼續執行,直到偵錯工具命令中斷為止。

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

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

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

視使用中的 VM 細節而定,您可能需要更改虛擬機器的網路設定,使其連接到 Microsoft 核心網路偵錯適配器。 否則,虛擬機將無法存取網路。

Windows 防火牆

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

第三方虛擬機器

VMWare

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

另請參閱

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

設定 Kernel-Mode 手動偵錯

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