KDbgCtrl の使用

KDbgCtrl (カーネル デバッグ制御、kdbgctrl.exe) ツールを使用すると、ターゲット コンピューターからのカーネル デバッグ接続を制御できます。

このツールを使用するには、ターゲット コンピューターで Windows Server 2003 以降のバージョンの Windows が実行されている必要があります。

KDbgCtrl は、完全カーネル デバッグ、自動カーネル デバッグ、ユーザーモード エラー処理、カーネル デバッグのブロック、DbgPrint バッファーのサイズという 5 つの異なる設定を制御できます。

KDbgCtrl を使用するには、前回の起動までに、ターゲット コンピューターのブート設定でカーネル デバッグを有効にしておく必要があります。 これを行っていなければ、KDbgCtrl を使用してカーネル デバッグを有効にすることはできません。 これらのブート設定の詳細については、「デバッグを有効にするためのブート パラメーター」を参照してください。

完全カーネル デバッグ

完全カーネル デバッグを有効にすると、ホスト コンピューターで実行されているカーネル デバッガーがターゲット コンピューターに割り込む可能性があります。 カーネル モードの例外が発生すると、ターゲット コンピューターはカーネル デバッガーを中断します。 ターゲットからホストへのメッセージ (DbgPrint 出力、シンボル読み込みメッセージ、リダイレクトされたユーザーモード デバッガーなど) も許可されます。

この設定を無効にすると、ホスト コンピューターからのすべてのシグナルはターゲットによって無視されます。

完全カーネル デバッグは既定で有効になっています。 現在の設定値を確認するには、kdbgctrl -c を使用します。 この設定を無効にするには、kdbgctrl -d を使用します。 この設定を有効にするには、kdbgctrl -e を使用します。

現在の設定を確認し、それを使用してバッチ ファイル内の実行を制御する場合は、kdbgctrl -cx コマンドを使用できます。 このコマンドの詳細については、「KDbgCtrl コマンドライン オプション」を参照してください。

自動カーネル デバッグ

完全カーネル デバッグが有効になっている場合、自動カーネル デバッグの現在の設定は重要ではありません。すべての通信が許可されます。

完全カーネル デバッグが無効で、自動カーネル デバッグが有効になっている場合は、ターゲット コンピューターのみがデバッグ接続を開始できます。

この場合、カーネルモードの例外、ブレークポイント、またはその他のカーネルモード イベントのみで接続が確立されます。 DbgPrint 出力、シンボル読み込みメッセージ、リダイレクトされたユーザーモード デバッガーの入力と出力、またはその他の同様のメッセージに対して、接続は確立されません。これらはカーネル デバッガーに送信されるのではなく、DbgPrint バッファーに格納されます。

例外またはイベントによってターゲットがカーネル デバッガーを中断した場合は、kdbgctrl -e を実行した場合と同様に、完全カーネル デバッグが自動的に有効になります。

自動カーネル デバッグは既定で無効になっています (ただし、完全カーネル デバッグも無効にしない限り、これは重要ではありません)。 現在の設定値を確認するには、kdbgctrl -ca を使用します。 この設定を無効にするには、kdbgctrl -da を使用します。 この設定を有効にするには、kdbgctrl -ea を使用します。

ユーザーモード エラー処理

ユーザーモード エラー処理が有効になっている場合、一部のユーザーモード イベントにより、ターゲット コンピューターがカーネル デバッガーを中断します。

具体的には、デバッガーによってコードに挿入されたブレークポイントや DbgBreakPoint の呼び出しなど、int 3 のすべての割り込みによって、カーネル デバッガーが中断されます。 ただし、アクセス違反やゼロ除算などの標準の例外は、通常、カーネル デバッガーには送信されません。

ユーザーモード デバッガーが既にプロセスにアタッチされている場合、このデバッガーはすべてのユーザーモード エラーをキャプチャします。カーネル デバッガーは変更されません。 さまざまなユーザーモード エラー ハンドラーの優先順位のランク付けについては、「事後デバッグの有効化」を参照してください。

ユーザーモード エラー処理を機能させるには、完全カーネル デバッグまたは自動カーネル デバッグも有効にする必要があります。

ユーザーモード エラー処理は既定で有効になっています。 現在の設定値を確認するには、kdbgctrl -cu を使用します。 この設定を無効にするには、kdbgctrl -du を使用します。 この設定を有効にするには、kdbgctrl -eu を使用します。

カーネル デバッグのブロック

カーネル デバッグ用にターゲット コンピューターを設定しても、ターゲット コンピューターが起動するまでカーネル デバッグの有効化を待たなければならない場合があります。 カーネル デバッグをブロックすると、これを実行できます。

重要

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

カーネル デバッグをブロックするには、次のようなコマンドを使用してターゲット コンピューターを設定します。

bcdedit /debug on
bcdedit /dbgsettings 1394 channel:32 /start DISABLE /noumex

ターゲット コンピューターを再起動すると、カーネル デバッグで使用できる準備が整いますが、カーネル デバッグとユーザーモード エラー処理は無効になります。 その時点で、ホスト コンピューターはターゲット コンピューターにアタッチできず、バグ チェックはカーネル デバッガーによってキャッチされず、ユーザーモードの例外によってカーネル デバッガーが中断されることはありません。

準備ができたら、次のコマンドを入力すると、(ターゲット コンピューターを再起動せずに) カーネル デバッグを有効にすることができます。

kdbgctrl -db
kdbgctrl -e

後で、カーネル デバッグを無効にするには、次のコマンドを入力します。

kdbgctrl -d
kdbgctrl -eb

kdbgctrl -cb を使用して、カーネル デバッグがブロックされているかどうかを確認できます。

DbgPrint バッファー サイズ

DbgPrint バッファーには、ターゲット コンピューターがカーネル デバッガーに送信したメッセージが格納されます。

完全カーネル デバッグが有効になっている場合、これらのメッセージはカーネル デバッガーに自動的に表示されます。 ただし、このオプションを無効にすると、これらのメッセージはバッファーに格納されます。 後でカーネル デバッグを有効にしてカーネル デバッガーに接続し、!dbgprint 拡張機能を使用してこのバッファーの内容を確認できます。 このバッファーの詳細については、「DbgPrint バッファー」を参照してください。

DbgPrint バッファーの既定のサイズは、Windows の無料ビルドでは 4 KB です。 現在のバッファー サイズを確認するには、kdbgctrl -cdb を使用 します。 バッファー サイズを変更するには、kdbgctrl -sdbSize を使用します。ここで、Size は新しいバッファー サイズを指定します。 構文の詳細については、「KDbgCtrl コマンドライン オプション」を参照してください。

現在の設定をすべて表示するには、次のコマンドを使用します。

kdbgctrl -c -ca -cu -cb -cdb 

既定の設定に戻すには、次のコマンドを使用します。

kdbgctrl -e -da -eu -db -sdb 0x1000 

ホスト コンピューターをロックアウトして、例外時にのみ接続されるようにするには、次のコマンドを使用します。

kdbgctrl -d -ea -eu 

すべてのカーネル デバッグを無効にするには、次のコマンドを使用します。

kdbgctrl -d -da 

すべてのカーネル デバッグを無効にする場合に、DbgPrint バッファーのサイズを大きくすることもできます。 こうしておくと、すべてのメッセージが保存されて、後で表示する必要が生じた場合に備えることができます。 メガバイトのメモリに余裕がある場合は、次のコマンドを使用できます。

kdbgctrl -sdb 0x100000