非侵襲的デバッグ (ユーザーモード)

ユーザーモード アプリケーションがすでに実行されている場合、デバッガーはそれを 非侵襲的にデバッグできます。 非広範なデバッグでは、デバッグ アクションの数は多くはありません。 ただし、ターゲット アプリケーションに対するデバッガーの干渉を最小限に抑えることができます。 非拡張デバッグは、ターゲット アプリケーションが応答を停止した場合に便利です。

非拡張デバッグでは、デバッガーは実際にはターゲット アプリケーションにアタッチしません。 デバッガーは、ターゲットのすべてのスレッドを中断し、ターゲットのメモリ、レジスタ、およびその他の情報にアクセスできます。 ただし、デバッガーはターゲットを制御できないため g (Go) などのコマンドは機能しません。

非拡張デバッグ中に許可されないコマンドを実行しようとすると、"デバッガーがアタッチされていないため、プロセスの実行を監視できません" というエラー メッセージが表示されます。

デバッグするプロセスの選択

ターゲット アプリケーションはプロセス ID (PID) またはプロセス名で指定できます。

アプリケーションを名前で指定する場合は、ファイル名拡張子を含むプロセスの完全な名前を使用する必要があります。 2 つのプロセスの名前が同じである場合は、代わりにプロセス ID を使用する必要があります。

プロセス ID とプロセス名を確認する方法について詳しくは プロセス ID を見つける」を参照してください。

非広範なデバッグ セッションの開始と停止の詳細については、次のトピックを参照してください。

CDB コマンド ライン

CDB コマンド ラインから実行中のプロセスを非侵襲的にデバッグするには、次の構文で -pv オプション、-p オプション、およびプロセス ID を指定します。

cdb -pv -p ProcessID

または、プロセス名を指定して実行中のプロセスを非侵襲的にデバッグするには、代わりに次の構文を使用します。

cdb -pv -pn ProcessName

他にも便利なコマンド ライン オプションがいくつかあります。 コマンド ライン構文の詳細については、「 CDB コマンド ライン オプション

WinDbg コマンド ライン

WinDbg コマンド ラインから実行中のプロセスを非侵襲的にデバッグするには、次の構文で -pv オプション、-p オプション、およびプロセス ID を指定します。

windbg -pv -p ProcessID

または、プロセス名を指定して実行中のプロセスを非侵襲的にデバッグするには、代わりに次の構文を使用します。

windbg -pv -pn ProcessName

他にも便利なコマンド ライン オプションがいくつかあります。 コマンド ライン構文の詳細については WinDbg コマンド ライン オプション」を参照してください。

WinDbg メニュー

WinDbg が休止モードの場合、[ファイル] メニューの [プロセスにアタッチ] をクリックするか、F6 キーを押すことにより、実行中のプロセスを非侵襲的にデバッグできます。

[プロセスへのアタッチ] ダイアログ ボックスが表示されたら、[非侵襲的] チェック ボックスをオンにします。 そして、必要なプロセス ID とプロセス名を含む行を選択します。 ([プロセス ID] ボックスにプロセス ID を入力することもできます。) 最後に、[OK] をクリックします。

デバッガー コマンド ウィンドウ

デバッガーが既にアクティブな場合は デバッガー コマンド ウィンドウ.attach -v (プロセスへのアタッチ) コマンドを使用して、実行中のプロセスを非侵襲的にデバッグできます。

デバッガーが既に 1 つ以上のプロセスを侵襲的にデバッグしている場合は、.attach コマンドを使用できます。 このコマンドは、休止状態の場合は CDB で使用できますが、休止中の WinDbg では使用できません。

.attach -v コマンドが成功すると、次回デバッガーが実行コマンドを発行するときに指定されたプロセスをデバッグします。 非侵襲的なデバッグ中は実行が許可されないため、デバッガーは一度に複数のプロセスを非侵襲的にデバッグすることはできません。 この制限は、.attach -v コマンドを使用すると、既存の侵襲的なデバッグ セッションの有用性が低下する可能性があることを意味します。

デバッグ セッションの開始

デバッグ セッションを開始する方法の詳細については デバッガー操作」を参照してください。