次の方法で共有


仮想 COM ポートを使用して仮想マシンの Kernel-Mode デバッグを手動で設定する

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

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

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

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

重要

BCDEdit を使用してブート情報を変更する前に、テスト PC で BitLocker やセキュア ブートなどの Windows セキュリティ機能を一時的に中断する必要がある場合があります。 テストが完了し、セキュリティ機能が無効になっている場合は、テスト PC を適切に管理するときに、これらのセキュリティ機能を再度有効にします。

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

    bcdedit /debug をオンに設定

    bcdedit /dbgsettings serial debugport:nbaudrate:115200

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

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

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

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

ホスト コンピューターで、管理者として WinDbg を開きます。 シリアル パイプ経由で VM をデバッグするときは、デバッガーが昇格モードで実行されている必要があります。 [ファイル] メニューから [カーネル デバッグ] を選択します。 [カーネル デバッグ] ダイアログ ボックスで、[COM] タブを開きます。[パイプ ]チェック ボックスをオンにして、[再接続 チェック ボックスをオンにします。 [ボー レート] には「115200」と入力します。 リセットには、「0」と入力します。

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

\\.\pipe\PipeName.

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

\\ 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 またはその他の仮想マシンには、このパラメーターを使用しないでください。

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

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

第 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

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

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

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

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

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

Remarks

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

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

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

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

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

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

Windows ファイアウォール

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

サード パーティ製 VM

VMWare

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

関連項目

KDNET を使用した仮想マシンのネットワーク デバッグを設定する方法

Kernel-Mode デバッグの手動設定

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