カーネル デバッガーからユーザー モード デバッグを制御すると、4 つの異なるモードが発生し、さまざまな方法で切り替えることができます。
手記 このシナリオを説明する場合、 ターゲット アプリケーション はデバッグ対象のユーザー モード アプリケーションを参照し、 ターゲット コンピューターはターゲット アプリケーションと CDB または NTSD プロセスを含むコンピューターを参照し、 ホスト コンピューター はカーネル デバッガーを含むコンピューターを参照します。
次の 4 つのモードが発生します。
ユーザー モードデバッグ
ターゲット コンピューターとターゲット アプリケーションがフリーズしています。 カーネル デバッガーの [デバッガー コマンド] ウィンドウ に、ユーザー モードのデバッグ プロンプトが表示されます。 WinDbg では、WinDbg ウィンドウの下部パネルのプロンプトに入力>が表示されます。 このプロンプトにコマンドを入力すると、ユーザー モードのデバッグ中にコマンドが入力された場合と同様に、ターゲット アプリケーションの状態を分析したり、実行またはステップ 実行したりできます。 シンボル ファイル、拡張 DLL、デバッガーがアクセスするその他のファイルは、ホスト コンピューターではなくターゲット コンピューター上のファイルになります。
ターゲット アプリケーションの実行
ターゲット コンピューターが実行され、ターゲット アプリケーションが実行され、デバッガーが待機しています。 このモードは、通常のデバッグでターゲットを実行させるのと同じです。
スリープ モード
ターゲット コンピューターが実行されているが、ターゲット アプリケーションがフリーズし、両方のデバッガーがフリーズしている。 このモードは、ターゲット コンピューターで何かを行う必要があるが、デバッグ セッションの状態を変更したくない場合に便利です。
カーネル モードデバッグ
ターゲット コンピューターとターゲット アプリケーションがフリーズしています。 カーネル モード デバッグ プロンプト kd> カーネル デバッガーのデバッガー コマンド ウィンドウに表示されます。 このモードは、一般的なカーネル モードのデバッグ状態です。
セッションはユーザー モード デバッグ モードで開始されます。 次のアクションとイベントにより、モードが変更されます。
ユーザー モード デバッグからターゲット アプリケーションの実行に切り替えるには、
Input>
プロンプトで g (Go) コマンドを使用します。ユーザー モード デバッグからターゲット アプリケーションの実行に一時的に切り替えてから、ユーザー モードのデバッグに戻すには、ステップ、トレース、またはその他の一時的な実行コマンドを使用します。 このようなコマンドの一覧については、「 ターゲットの制御」を参照してください。
ユーザー モード デバッグからスリープ モードに切り替えるには、 .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 キーを押すか、[中断] をクリックするか、ターゲット コンピューター キーボードの SYSRQ または Alt + SYSRQ キーを押します。 (カーネル デバッガーが KD で、カーネル デバッガーがユーザー モード デバッガーと通信しているのと同時に Ctrl キーを押しながら C キーを押すと、ユーザー モード デバッガーで Ctrl + C キーを押すとキャプチャされる場合があります)。
デバッガーでカーネル エラーが発生した場合、または Breakin.exe ツールを使用している場合、システムはターゲット アプリケーションの実行からカーネル モードデバッグに切り替えます。
スリープ モードからユーザー モードのデバッグに切り替えるには、スリープ時間の有効期限が切れるのを待つか、-wake コマンド ライン オプションを使用してターゲット コンピューターで新しい CDB プロセスを開始するか、ターゲット コンピューター上の別の CDB または NTSD のコピーで .wake (Wake Debugger) コマンドを使用します。
カーネル モードデバッグから切り替えるには、
kd>
プロンプトで g (Go) コマンドを使用します。 このコマンドは、ユーザー モードのデバッグまたはターゲット アプリケーションの実行に戻ります (2 つのうち、最も最近使用された状態のいずれか)。