モードの切り替え

カーネル デバッガーからユーザー モード デバッグを制御すると、4 つの異なるモードが発生し、さまざまな方法で切り替えることができます。

このシナリオの説明では、ターゲット アプリケーションは、デバッグ対象のユーザー モード アプリケーションを指します。ターゲット コンピューターは、ターゲット アプリケーションと CDB または NTSD のプロセスが存在するコンピューターを指します。ホスト コンピューターは、カーネル デバッガーが存在するコンピューターを指します。

次の 4 つのモードが発生します。

ユーザーモード デバッグ
ターゲット コンピューターとターゲット アプリケーションがフリーズしています。 カーネル デバッガーの [デバッガー コマンド] ウィンドウ に、ユーザー モードのデバッグ プロンプトが表示されます。 WinDbg では、WinDbg ウィンドウの下部パネルのプロンプトに入力>が表示されます。 このプロンプトにコマンドを入力すると、ユーザー モードのデバッグ中にコマンドが入力された場合と同様に、ターゲット アプリケーションの状態を分析したり、実行またはステップ 実行したりできます。 シンボル ファイル、拡張 DLL、デバッガーがアクセスするその他のファイルは、ホスト コンピューターではなくターゲット コンピューター上のファイルになります。

ターゲット アプリケーションの実行
ターゲット コンピューターが実行され、ターゲット アプリケーションが実行され、デバッガーが待機しています。 このモードは、通常のデバッグでターゲットを実行させるのと同じです。

スリープ モード
ターゲット コンピューターが実行されているが、ターゲット アプリケーションがフリーズし、両方のデバッガーがフリーズしている。 このモードは、ターゲット コンピューターで何かを行う必要があるが、デバッグ セッションの状態を変更したくない場合に便利です。

カーネルモード デバッグ
ターゲット コンピューターとターゲット アプリケーションがフリーズしています。 カーネル モード デバッグ プロンプト kd> がカーネル デバッガーのデバッガー コマンド ウィンドウに表示されます。 このモードは、一般的なカーネル モードのデバッグ状態です。

セッションはユーザー モード デバッグ モードで開始されます。 次のアクションとイベントにより、モードが変更されます。

  • ユーザー モード デバッグからターゲット アプリケーションの実行に切り替えるには、プロンプトで g (Go) コマンドを Input> 使用します。

  • ユーザー モード デバッグからターゲット アプリケーションの実行に一時的に切り替えてから、ユーザー モードのデバッグに戻すには、ステップ、トレース、またはその他の一時的な実行コマンドを使用します。 これらの実行コマンドのリストについては、 「ターゲットの制御」を参照してください。

  • ユーザー モード デバッグからスリープ モードに切り替えるには、 .sleep (デバッガーの一時停止) コマンドを使用します。 このコマンドは時間が設定されます。 時間が経過すると、システムはユーザー モード デバッグに戻ります。

  • ユーザー モード デバッグからカーネル モード デバッグに切り替えるには、 .breakin (Break to the Kernel Debugger) コマンドを使用します。 呼び出し元のプロセスに管理者権限がない場合、アクセス拒否エラーで .breakin が失敗する可能性があることに注意してください。 この場合は、短い .sleep コマンドを発行し、Ctrl + C キーを押して KD に切り替えます。

  • 特定の環境でのみ、ターゲット アプリケーションの実行からユーザー モードデバッグに切り替えることができます。 ターゲット コンピューターで Microsoft Windows XP 以降のバージョンの Windows オペレーティング システムが実行されている場合は、 !bpid 拡張機能コマンドを使用できます。 (NTSD ではなく) CDB を使用している場合は、ターゲット コンピューターで CDB ウィンドウをアクティブ化し、Ctrl キーを押しながら C キーを押します。

  • ターゲット アプリケーションがブレークポイントにヒットした場合、例外が発生した場合、他の制御されたイベントが発生した場合、または終了した場合、システムはターゲット アプリケーションの実行からユーザー モードデバッグに切り替えます。 このようなイベントは、特に NTSD を使用している場合に事前に計画する必要があります。 これらのイベントの詳細については、 「ブレークポイントの使用」 および 「例外とイベントの制御」を参照してください。

  • ターゲット・アプリケーションの実行からカーネル・モードのデバッグに切り替えるには、KDウィンドウでCTRL+Cを押すか、WinDbgウィンドウでCTRL+BREAKを押すか、 BreakDebug メニューから選びクリックするか、ターゲット・コンピュータのキーボードでSYSRQまたはALT+SYSRQを押します。 (カーネル デバッガーが KD で、カーネル デバッガーがユーザー モード デバッガーと通信しているのと同時に Ctrl キーを押しながら C キーを押すと、ユーザー モード デバッガーで Ctrl + C キーを押すとキャプチャされる場合があります)。

  • デバッガーでカーネル エラーが発生した場合、または Breakin.exe ツールを使用する場合、システムはターゲット アプリケーションの実行からカーネル モード デバッグに切り替えます。

  • スリープ モードからユーザー モードのデバッグに切り替えるには、スリープ時間の有効期限が切れるのを待ち、-wake コマンド ライン オプションを使用してターゲット コンピューターで新しい CDB プロセスを開始するか、ターゲット コンピューター上の別の CDB または NTSD のコピーで .wake (Wake Debugger) コマンドを使用 します。

  • カーネル モードデバッグから切り替えるには、プロンプトで g (Go) コマンドを kd> 使用します。 このコマンドは、ユーザー モードのデバッグまたはターゲット アプリケーションの実行に戻ります (2 つのうち、最も最近使用された状態のいずれか)。