Share via


仮想 COM ポートを使用した仮想マシンのカーネル モード デバッグの手動設定

Windows 用デバッグ ツールは、仮想マシンのカーネル デバッグをサポートします。 仮想マシンは、デバッガーと同じ物理コンピューター上、または同じネットワークに接続されている別のコンピューター上に配置できます。 このトピックでは、KDCOM 経由で仮想 COM ポートを使用して仮想マシンのデバッグを手動で設定する方法について説明します。

KDNET 仮想ネットワークを使用することは、より高速なオプションであるため、お勧めです。 詳細については、「KDNET を使用した仮想マシンのネットワーク デバッグの設定」を参照してください。

ターゲット仮想マシンの設定

デバッガを実行するコンピューターはホスト コンピューターと呼ばれ、デバッグ対象の仮想マシンはターゲット仮想マシンと呼ばれます。

重要

BCDEdit を使用してブート情報を変更する前に、テスト PC 上で BitLocker や Secure Boot などの Windows セキュリティ機能を一時的に停止する必要があるかもしれません。 テストが完了したら、これらのセキュリティ機能を再度有効にし、セキュリティ機能が無効になっている場合は、テスト PC を適切に管理します。

  1. 仮想マシンで管理者特権のコマンド プロンプト ウィンドウから、次のコマンドを入力します。

    bcdedit /debug on

    bcdedit /dbgsettings serial debugport:nbaudrate:115200

    ここで、n は仮想マシン上の COM ポートの番号です。

  2. 仮想マシンで、名前付きパイプにマップするように COM ポートを構成します。 デバッガーはこのパイプを介して接続します。 このパイプの作成方法の詳細については、仮想マシンのドキュメントを参照してください。

  3. 管理者コマンド プロンプトなど、デバッガーを管理者特権モードで起動します。 シリアル パイプ経由で VM をデバッグするときは、デバッガーが管理者特権モードで実行されている必要があります。 デバッガーがアタッチされ実行されたら、ターゲット VM を再起動します。

WinDbg を使用したデバッグ セッションの開始

ホスト コンピューターで、WinDbg を管理者として起動します。 シリアル パイプ経由で VM をデバッグするときは、デバッガーが管理者特権モードで実行されている必要があります。 File メニューの Kernel Debug を選択します。 Kernel Debugging ダイアログ ボックスで、COM タブを開きます。Pipe ボックスをオンにし、Reconnect ボックスをオンにします。 Baud Rate には「115200」と入力します。 Resets には「0」と入力します。

デバッガーが仮想マシンと同じコンピューターで実行されている場合は、Port に次のように入力します。

\\.\pipe\PipeName.

デバッガーが仮想マシンとは別のコンピューターで実行されている場合は、Port に次のように入力します。

\\VMHost\pipe\PipeName

OK を選択します。

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
ホストとターゲットの同期時に、リセット パケットをターゲットに何個でも無制限に送信できることを指定します。 パイプが余分なバイトをドロップする Microsoft Virtual PC やその他の仮想マシンには、resets=0 パラメーターを使用します。 このパラメーターは、パイプが余分なバイトを必ずしもすべては削除しない VMware やその他の仮想マシンには使用しないでください。

reconnect
読み取り/書き込みエラーが発生した場合に、デバッガーがパイプとの接続を自動的に切断し再接続します。 また、デバッガーの起動時にデバッガーが名前付きパイプを検出できない場合は、デバッガーは reconnect パラメーターによって、PipeName という名前のパイプが表示されるのを待ちます。 コンピューターの再起動中にパイプを破棄して再作成する仮想 PC やその他の仮想マシンには、reconnect を使用します。 このパラメーターは、コンピューターの再起動中にパイプを保持する VMware やその他の仮想マシンには使用しないでください。

その他のコマンド ライン オプションの詳細については、「KD コマンド ライン オプション」または「WinDbg コマンド ライン オプション」を参照してください。

第 2 世代仮想マシン

既定では、第 2 世代仮想マシンでは COM ポートは提示されません。 COM ポートの追加は、POWERShell または WMI を通じて行うことができます。 COM ポートを Hyper-V マネージャー コンソールに表示するには、パスを使用して作成する必要があります。

第 2 世代仮想マシンで COM ポートを使用したカーネル デバッグを有効にするには、以下の手順を実行します。

  1. 次の PowerShell コマンドを入力して、セキュア ブートを無効にします。

    Set-VMFirmware –VmnameVmName–EnableSecureBoot Off

    ここで、VmName は仮想マシンの名前です。

  2. 次の PowerShell コマンドを入力して、仮想マシンに COM ポートを追加します。

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

    たとえば、次のコマンドは、仮想マシン TestVM の 1 番目の COM ポートを構成し、ローカル コンピューターの名前付きパイプ TestPipe に接続します。

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

  3. デバッガーがアタッチされ実行されたら、VM を停止した後にコールド スタートして、VM で COM ポートをアクティブにします。 エミュレートされた UARTS は、デバッグに使用できません。ただし、少なくとも 1 つが実際にパイプ名で構成されており、かつホット追加できない場合は例外です。

  4. 構成変更の更新が完了したら、セキュア ブートを再び有効にします。

第 2 世代の VM の詳細については、「第 2 世代の仮想マシンの概要」を参照してください。

備考

ターゲット コンピューターが応答を停止した場合、以前のカーネル デバッグ アクションが原因でターゲット コンピューターが停止した場合、または -b コマンド ライン オプションを使用した場合、デバッガーはターゲット コンピューターの実行をすぐに中断します。

それ以外の場合、デバッガーが中断を指示するまで、ターゲット コンピューターの実行が続行されます。

ファイアウォールとネットワーク アクセスに関する問題のトラブルシューティング

デバッガー (WinDbg または KD) は、ファイアウォール経由でアクセスする必要があります。 これは、ネットワーク アダプターでサポートされている仮想シリアル ポートの場合にも当てはまる可能性があります。

デバッガーの読み込み時にファイアウォールをオフにするように Windows から求められた場合は、3 つのボックスをすべて選択します。

使用中の VM の詳細によっては、仮想マシンのネットワーク設定を変更して、仮想マシンを Microsoft カーネル ネットワーク デバッグ アダプターにブリッジすることが必要になる場合があります。 そうしなければ、仮想マシンはネットワークにアクセスできません。

Windows ファイアウォール

[コントロール パネル] を使用して、Windows ファイアウォール経由でアクセスできるように設定できます。 [コントロール パネル] > [システムとセキュリティ] を開き、[Windows ファイアウォールによるアプリケーションの許可] を選びます。 アプリケーションの一覧で、Windows GUI Symbolic DebuggerWindows Kernel Debugger を見つけます。 チェックボックスを使用して、ファイアウォール経由でこれら 2 つのアプリケーションを許可します。 デバッグ アプリケーション (WinDbg または KD) を再起動します。

サード パーティの VM

VMWare VMWare 機能 (リセット ボタンなど) を使用して仮想マシンを再起動する場合は、WinDbg を終了した後、WinDbg を再起動してデバッグを続行します。 仮想マシンのデバッグ中、VMWare は CPU の 100% を消費することがよくあります。

関連項目

KDNET による仮想マシンのネットワーク デバッグの設定

カーネル モードのデバッグを手動でセットアップする

仮想マシン ホストのネットワーク デバッグの設定