次の方法で共有


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

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

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

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

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

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

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

プロセス ID とプロセス名を決定する方法の詳細については、「 プロセス ID の検索」を参照してください。

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

CDB コマンド ライン

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

cdb -pv -pProcessID

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

cdb -pv -pnProcessName

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

WinDbg コマンド ライン

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

windbg -pv -pProcessID

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

windbg -pv -pnProcessName

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

WinDbg メニュー

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

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

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

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

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

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

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

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