ターゲット アプリケーションへの再アタッチ

ユーザー モード デバッグの実行中にデバッガーがフリーズするか応答を停止する (つまり、クラッシュする) 場合は、新しいデバッガーを既存のプロセスにアタッチできます。

この方法は、Microsoft Windows XP 以降のバージョンの Windows でのみサポートされています。 この方法は、デバッガーが最初にプロセスを作成したか、既存のプロセスにアタッチしたかには依存しません。 この方法は、-pd オプションを使用したかどうかには依存しません。

デバッガーを既存のターゲット アプリケーションに再接続するには、次の手順を実行します。

  1. 対象アプリケーションのプロセスIDを確認します。

  2. CDB または WinDbg の新しいインスタンスを開始します。 -pe コマンドライン オプションを使用します。

    Debugger -pe -p PID 
    

    他のコマンドライン オプションを使用することもできます。

    .attach (プロセスにアタッチ) コマンドを -e オプションとともに使用することで、休止状態のデバッガーから接続することもできます。

  3. アタッチが完了したら、元のデバッガー プロセスを終了します。

  4. プロセスが適切に応答しない場合は、一時停止カウントが高すぎる可能性があります。 ~m (スレッドの再開) コマンドを使用して、サスペンド数を減らすことができます。 サスペンド数の詳細については、「プロセスとスレッドの制御」を参照してください。

元のデバッガがまだ正常に動作している場合、この方法は機能しない可能性があります。 2 つのデバッガはデバッグ イベントをめぐって競合しており、Windows オペレーティング システムは必ずしもすべてのデバッグ イベントを新しいデバッガに割り当てるとは限りません。

新しいデバッガーを接続する前に元のデバッガーが終了すると、ターゲット アプリケーションも閉じられます。 (ただし、デバッガが -pd オプションを使用して接続され、その後正常に終了した場合、ターゲット アプリケーションは実行を継続します。この状況では、2 番目のデバッガーは、-pe オプションを使用せずにターゲット アプリケーションに接続できます。)

すでにプロセスをデバッグしていて、プロセスから切り離してデバッグ状態でフリーズしたままにしたい場合は、.abandon (プロセスの放棄) コマンドを使用できます。 このコマンドを実行すると、このトピックで説明する手順を使用して、任意の Windows デバッガーをプロセスに再接続できます。