ターゲットの制御
ユーザー モードでターゲット アプリケーションをデバッグするとき、またはカーネル モードでターゲット コンピューターをデバッグするときに、ターゲットを実行または停止することができます。
デバッガーがカーネル モード ターゲットに接続すると、 -b command-line オプションを使用しない限り、ターゲット システムが応答を停止しているか (つまり、 crashed)、以前のカーネル デバッグ アクションのためにターゲット システムが停止した場合を除き、デバッガーはターゲットを実行したままにします。
デバッガーが開始されるか、ユーザー モードのターゲットに接続すると、-g コマンド ライン オプションを使用しない限り、デバッガーは即座にターゲットを停止します。 詳細については、「初期ブレークポイント」を参照してください。
ターゲットが実行中の場合
ターゲットが実行中である場合、ほとんどのデバッガー アクションは使用できません。
実行中のターゲットを停止する場合、[中断] コマンドを発行できます。 このコマンドにより、デバッガーがターゲットに割り込みます。 つまり、デバッガーはターゲットを停止し、すべての制御がデバッガーに渡されます。 アプリケーションがすぐに中断されない場合があります。 たとえば、すべてのスレッドが現在システム コードを実行している場合、または待機操作中の場合、アプリケーションは、制御がアプリケーションのコードに戻った後にのみ中断します。
実行中のターゲットで例外が発生した場合、特定のイベントが発生した場合、ブレークポイントがヒットした場合、またはアプリケーションが正常に終了した場合は、ターゲットにデバッガーが割り込みます。 このアクションにより、ターゲットが停止し、デバッガーにすべての制御が与えられます。 デバッガー コマンド ウィンドウにメッセージが表示され、エラー、イベント、ブレークポイントの説明が表示されます。
ターゲットが停止したとき
ターゲットの実行を開始または制御するには、次の操作を行います。
アプリケーションの実行を開始するには、[実行] コマンドを発行します。
アプリケーションで一度に 1 つずつ命令を実行するには、[ステップ イン] コマンドまたは [ステップ オーバー] コマンドを使用します。 関数呼び出しが発生した場合、[ステップ イン] の場合は関数に入り、各命令のステップ実行を続けます。 [ステップ オーバー] の場合は、関数呼び出しを 1 つのステップとして扱います。 デバッガーがアセンブリ モードである場合、ステップにより一度に 1 つずつマシン語命令が実行されます。 デバッガーがソース モードである場合、ステップにより一度に 1 つのソース行が実行されます。
現在の関数を完了し、元の処理に戻るときに停止するには、[ステップ アウト] コマンドまたは[トレースと監視] コマンドを使用します。 [ステップ アウト] コマンドは、現在の関数が終了するまで継続します。 [トレースと監視] は、現在の関数が終了するまで継続し、関数呼び出しの概要も表示します。 ただし、当該の関数の最初の命令で [トレースと監視] コマンドを発行する必要があります。
例外が発生した場合、[例外処理ありで実行] コマンドと [例外処理なしで実行] コマンドを使用して、実行を再開し、実行の状態を制御することができます。 (例外の詳細については、「例外とイベントの制御」を参照してください。)
(WinDbg のみ) [逆アセンブル] ウィンドウまたは [ソース] ウィンドウで行を選択してから[カーソルまで実行] コマンドを使用すると、選択した行に達するまでプログラムが実行されます。
(ユーザー モードのみ) ターゲット アプリケーションを終了して最初から起動し直す場合は、[再起動] コマンドを使用します。 このコマンドは、デバッガーが作成したプロセスでのみ使用できます。 プロセスが再起動されると、すぐにデバッガーが割り込みます。
(WinDbg のみ) ターゲット アプリケーションを終了してデバッガーをクリアするには、[デバッグの停止] コマンドを使用します。 このコマンドを使用すると、別のターゲットのデバッグを開始できます。
コマンドの形式
ターゲットの実行を開始または制御するためのほとんどのコマンドは、テキスト コマンド、メニュー コマンド、ツール バー ボタン、ショートカット キーとして存在します。 基本的なテキスト コマンドとして、CDB、KD、または WinDbg でこれらのコマンドを使用できます。 (コマンドのテキスト形式では多くの場合、プログラム カウンターの場所の変更や、固定数の命令の実行など、追加のオプションがサポートされます)。WinDbg では、メニュー コマンド、ツール バー ボタン、ショートカット キーを使用できます。
コマンドは、次の形式で使用できます。
command | WinDbg コマンド | WinDbg ショートカット キー | 効果 |
---|---|---|---|
Debug | Run to Cursor (デバッグ | カーソルまで実行) |
F7 Ctrl + F10 |
(WinDbg のみ) カーソルがマークする行に達するまで実行されます。 |
|
Debug | Stop Debugging (デバッグ | デバッグを停止) |
Shift + F5 |
すべてのデバッグを停止し、ターゲットを閉じます。 |
|
(CDB/KD のみ) Ctrl + C |
Debug | Break (デバッグ | 中断) |
Ctrl + Break |
実行が停止し、デバッガーがターゲットに割り込みます。 |
Debug | Restart (デバッグ | 再開) |
Ctrl + Shift + F5 |
(ユーザー モードのみ) ターゲット アプリケーションを再起動します。 |
|
Debug | Go (デバッグ | 移動) |
F5 |
ターゲットは自由に実行されます。 |
|
条件付きブレークポイントの後に実行を再開します。 |
|||
Debug | Go Handled Exception (デバッグ | 処理された例外に移動) |
現在の例外が処理済みとして扱われる点を除いて、g (実行) と同じです。 |
||
Debug | Go Unhandled Exception (デバッグ | 処理されない例外に移動) |
現在の例外が未処理として扱われる点を除いて、g (実行) と同じです。 |
||
Debug | Step Out (デバッグ | ステップ アウト) |
Shift + F11 |
ターゲットは、現在の関数が完了するまで実行されます。 |
|
Debug | Step Over (デバッグ | ステップ オーバー) |
F10 |
ターゲットは 1 つの命令を実行します。 この命令が関数呼び出しの場合、その関数は 1 つのステップとして実行されます。 |
|
ターゲットは、指定されたアドレスに達するまで実行されます。 この関数のすべてのステップが表示されます (ただし、呼び出された関数のステップは表示されません)。 |
|||
ターゲットは、次の呼び出し命令まで実行されます。 現在の命令が呼び出し命令である場合、この呼び出しは完全に実行され、次の呼び出しまで実行が継続されます。 |
|||
ターゲットは、呼び出し命令または戻り命令に達するまで実行されます。 |
|||
ターゲットは、条件分岐または無条件分岐、呼び出し、戻り、システム呼び出しなど、任意の種類の分岐命令に達するまで実行されます。 |
|||
ターゲットは、戻り命令に達するまで実行されます。 |
|||
Debug | Step Into (デバッグ | ステップ イン) |
F11 F8 |
ターゲットは 1 つの命令を実行します。 この命令が関数呼び出しの場合、デバッガーはその呼び出しをトレースします。 |
|
ターゲットは、指定されたアドレスに達するまで実行されます。 この関数および呼び出された関数のすべてのステップが表示されます。 |
|||
(カーネル モードを除くすべてのモード、x86 ベースのシステムのみ) ターゲットは、次の分岐命令に達するまで実行されます。 |
|||
ターゲットは、次の呼び出し命令まで実行されます。 現在の命令が呼び出し命令である場合、その命令は、新しい呼び出しに達するまでトレースされます。 |
|||
ターゲットは、呼び出し命令または戻り命令に達するまで実行されます。 現在の命令が呼び出し命令または戻り命令である場合、その命令は、新しい呼び出しまたは戻りに達するまでトレースされます。 |
|||
ターゲットは、条件分岐または無条件分岐、呼び出し、戻り、システム呼び出しなど、任意の種類の分岐命令に達するまで実行されます。 現在の命令が分岐命令である場合、その命令は、新しい分岐命令に達するまでトレースされます。 |
|||
ターゲットは、戻り命令に達するまで実行されます。 現在の命令が戻り命令である場合、その命令は、新しい戻りに達するまでトレースされます。 |
|||
ターゲットは、指定された関数全体が完了するまで実行されます。 その後に統計が表示されます。 |
ターゲット コンピューターを再起動する方法の詳細については、「ターゲット コンピューターのクラッシュと再起動」を参照してください。
コマンドライン オプション
アプリケーションが開始されるときまたは読み込まれるときに直ちにアプリケーションを停止したくない場合は、-g コマンド ライン オプションと共に CDB または WinDbg を使用します。 この状況の詳細については、「初期ブレークポイント」を参照してください。
CDB と WinDbg では、 -G command-line オプションもサポート。 このオプションを使用すると、アプリケーションが正常に完了するとデバッグ セッションが終了します。
次のコマンドは、アプリケーションを最初から完了まで実行しようと試み、エラーが発生した場合にのみデバッガー プロンプトが表示されます。
cdb -g -G ApplicationName
-pt command-line オプションを使用して、ブレーク タイムアウトを設定できます。ターゲットがデバッガーと通信できなくなる可能性がある特定の問題があります。 中断コマンドが発行され、それ以降にデバッガーがターゲットに割り込めない場合、デバッガーは "割り込みタイムアウト" メッセージを表示します。
この時点で、デバッガーはターゲットへの割り込みの試行を停止します。 その代わりに、デバッガーはターゲットを一時停止し、ユーザーがターゲット アプリケーションを調べられるようにします (ただし制御はできません)。
既定のタイムアウトは 30 秒です。