WinDbg を使用して、実行中のプロセスにアタッチしたり、新しいプロセスを生成してアタッチしたりできます。
実行中のプロセスへの接続
WinDbg を使用して実行中のプロセスにアタッチするには、いくつかの方法があります。 選択する方法に関係なく、プロセス ID またはプロセス名が必要です。 プロセス ID は、オペレーティング システムによって割り当てられた番号です。 プロセス ID とプロセス名を決定する方法の詳細については、「 プロセス ID の検索」を参照してください。
WinDbg メニュー
WinDbg が休止モードの場合は、[ファイル] メニューから [プロセスにアタッチ] を選択するか、F6 キーを押して、実行中のプロセスにアタッチできます。
[ プロセスにアタッチ ] ダイアログ ボックスで、デバッグするプロセスを選択し、[ OK] を選択します。
コマンド プロンプト
コマンド プロンプト ウィンドウでは、WinDbg を起動するときに実行中のプロセスにアタッチできます。 次のいずれかのコマンドを使用します。
- windbg -pProcessID
- windbg -pnProcessName
ここで、ProcessID は実行中のプロセスのプロセス ID、ProcessName は実行中のプロセスの名前です。
コマンド ライン構文の詳細については、「 WinDbg Command-Line オプション」を参照してください。
デバッガー コマンド ウィンドウ
WinDbg が既に 1 つ以上のプロセスをデバッグしている場合は、デバッガー コマンド ウィンドウの .attach (プロセスにアタッチ) コマンドを使用して、実行中のプロセスにアタッチできます。
デバッガーは、一部のスレッドが固定または中断されていない限り、常に複数のターゲット プロセスを同時に開始します。
.attach コマンドが成功した場合、デバッガーは次にデバッガーが実行コマンドを発行すると、指定されたプロセスにアタッチされます。 このコマンドを 1 行に複数回使用する場合は、このコマンドを使用する回数限り、デバッガーから実行を要求する必要があります。
実行中のプロセスに非侵入的に接続
実行中のプロセスをデバッグし、その実行に最小限の干渉のみを行う場合は、プロセスを 非広範にデバッグする必要があります。
WinDbg メニュー
WinDbg が休止モードの場合は、[ファイル] メニューから [プロセスにアタッチ] を選択するか、F6 キーを押して、実行中のプロセスを一時的にデバッグできます。
[ プロセスにアタッチ ] ダイアログ ボックスが表示されたら、[ 非侵入 ] チェック ボックスをオンにします。 次に、必要なプロセス ID と名前を含む行を選択します。 ([プロセス ID] ボックスに プロセス ID を 入力することもできます)。最後に、[ OK] を選択します。
コマンド プロンプト
コマンド プロンプト ウィンドウでは、WinDbg を起動するときに、実行中のプロセスに非明示的にアタッチできます。 次のいずれかのコマンドを使用します。
- windbg -pv -pProcessID
- windbg -pv -pnProcessName
他にも便利なコマンド ライン オプションがいくつかあります。 コマンド ライン構文の詳細については、「 WinDbg Command-Line オプション」を参照してください。
デバッガー コマンド ウィンドウ
デバッガーが既にアクティブな場合は、[デバッガー コマンド] ウィンドウで .attach -v (プロセスにアタッチ) コマンドを使用して、実行中のプロセスを一時的にデバッグできます。
デバッガーが既に 1 つ以上のプロセスを侵入的にデバッグしている場合は、 .attach コマンドを使用できます。 WinDbg が休止状態の場合は、このコマンドを使用できません。
.attach -v コマンドが成功した場合、デバッガーは、次にデバッガーが実行コマンドを発行すると、指定されたプロセスをデバッグします。 非拡張デバッグ中は実行が許可されないため、デバッガーは一度に複数のプロセスを非侵襲的にデバッグすることはできません。 また、この制限は 、.attach -v コマンドを使用すると、既存の侵入デバッグ セッションの有用性が低下する可能性があることを意味します。
新しいプロセスの生成
WinDbg は、ユーザー モード アプリケーションを起動し、アプリケーションをデバッグできます。 アプリケーションは名前で指定されます。 デバッガーは、子プロセス (元のターゲット プロセスが開始した追加のプロセス) に自動的にアタッチすることもできます。
デバッガーによって作成されるプロセス (生成されたプロセスとも呼ばれます) は、デバッガーが作成しないプロセスとは若干異なる動作をします。
デバッガーによって作成されるプロセスでは、標準ヒープ API を使用する代わりに、特別なデバッグ ヒープが使用されます。 _NO_DEBUG_HEAP 環境変数 または -hd コマンド ライン オプションを使用して、生成されたプロセスでデバッグ ヒープの代わりに標準ヒープを使用するように強制できます。
また、ターゲット アプリケーションはデバッガーの子プロセスであるため、デバッガーのアクセス許可を継承します。 このアクセス許可により、ターゲット アプリケーションが、それ以外の方法では実行できなかった特定のアクションを実行できる場合があります。 たとえば、ターゲット アプリケーションが保護されたプロセスに影響を与える可能性があります。
WinDbg メニュー
WinDbg が休止モードの場合は、[ファイル] メニューから [実行可能ファイルを開く] を選択するか、Ctrl キーを押しながら E キーを押して、新しいプロセスを生成できます。
[実行可能ファイルを開く] ダイアログ ボックスが表示されたら、[ファイル 名 ] ボックスに実行可能ファイルの完全なパスを入力するか、[ 検索 先] リストを使用して、目的のパスとファイル名を選択します。
ユーザー モード アプリケーションでコマンド ライン パラメーターを使用する場合は、[ 引数 ] ボックスにパラメーターを入力します。 既定のディレクトリから開始ディレクトリを変更する場合は、[ スタート ディレクトリ] ボックスにディレクトリ パスを入力します。 WinDbg を子プロセスにアタッチする場合は、[ 子プロセスのデバッグ] チェック ボックスもオンにします。
選択した後、[ 開く] を選択します。
コマンド プロンプト
コマンド プロンプト ウィンドウでは、WinDbg を起動するときに新しいプロセスを生成できます。 次のコマンドを使用します。
windbg [-o]ProgramName[Arguments]
o オプションを指定すると、デバッガーは子プロセスにアタッチされます。 他にも便利なコマンド ライン オプションがいくつかあります。 コマンド ライン構文の詳細については、「 WinDbg Command-Line オプション」を参照してください。
デバッガー コマンド ウィンドウ
WinDbg が既に 1 つ以上のプロセスをデバッグしている場合は、デバッガー コマンド ウィンドウで .create (プロセスの作成) コマンドを使用して新しいプロセスを作成できます。
デバッガーは、一部のスレッドが固定または中断されていない限り、常に複数のターゲット プロセスを同時に開始します。
.create コマンドが成功した場合、デバッガーは、次にデバッガーが実行コマンドを発行する際に、指定されたプロセスを作成します。 このコマンドを 1 行に複数回使用する場合は、このコマンドを使用する回数限り、デバッガーから実行を要求する必要があります。
.create の前に .createdir (Set Created Process Directory) コマンドを使用して、アプリケーションの開始ディレクトリを制御できます。 .createdir -I コマンドまたは -noinh コマンド ライン オプションを使用して、ターゲット アプリケーションがデバッガーのハンドルを継承するかどうかを制御できます。
.childdbg (Debug Child Processes) コマンドを使用して、子プロセスのデバッグをアクティブ化または非アクティブ化できます。
プロセスに再接続
デバッガーが応答を停止したりフリーズしたりした場合は、新しいデバッガーをターゲット プロセスにアタッチできます。 このような状況でデバッガーをアタッチする方法の詳細については、「 ターゲット アプリケーションへの再アタッチ」を参照してください。