ターゲット アプリケーションへの再アタッチ
ユーザー モード デバッグの実行中にデバッガーがフリーズするか応答を停止する (つまり、クラッシュする) 場合は、新しいデバッガーを既存のプロセスにアタッチできます。
注 この方法は、Microsoft Windows XP 以降のバージョンの Windows でのみサポートされています。 この方法は、デバッガーが最初にプロセスを作成したか、既存のプロセスにアタッチしたかには依存しません。 この方法は、-pd オプションを使用したかどうかには依存しません。
デバッガーを既存のターゲット アプリケーションに再接続するには、次の手順を実行します。
対象アプリケーションのプロセスIDを確認します。
CDB または WinDbg の新しいインスタンスを開始します。 -pe コマンドライン オプションを使用します。
Debugger -pe -p PID
他のコマンドライン オプションを使用することもできます。
.attach (プロセスにアタッチ) コマンドを -e オプションとともに使用することで、休止状態のデバッガーから接続することもできます。
アタッチが完了したら、元のデバッガー プロセスを終了します。
プロセスが適切に応答しない場合は、一時停止カウントが高すぎる可能性があります。 ~m (スレッドの再開) コマンドを使用して、サスペンド数を減らすことができます。 サスペンド数の詳細については、「プロセスとスレッドの制御」を参照してください。
元のデバッガがまだ正常に動作している場合、この方法は機能しない可能性があります。 2 つのデバッガはデバッグ イベントをめぐって競合しており、Windows オペレーティング システムは必ずしもすべてのデバッグ イベントを新しいデバッガに割り当てるとは限りません。
新しいデバッガーを接続する前に元のデバッガーが終了すると、ターゲット アプリケーションも閉じられます。 (ただし、デバッガが -pd オプションを使用して接続され、その後正常に終了した場合、ターゲット アプリケーションは実行を継続します。この状況では、2 番目のデバッガーは、-pe オプションを使用せずにターゲット アプリケーションに接続できます。)
すでにプロセスをデバッグしていて、プロセスから切り離してデバッグ状態でフリーズしたままにしたい場合は、.abandon (プロセスの放棄) コマンドを使用できます。 このコマンドを実行すると、このトピックで説明する手順を使用して、任意の Windows デバッガーをプロセスに再接続できます。