Visual Studio Debugger の開始、中断、ナビゲート、および停止

VS プロジェクトのデバッグを開始する、プロセスにアタッチする、コードを中断する、コードをステップ実行する、カーソル位置まで実行する、呼び出し履歴の関数まで実行する、次に実行されるステートメントを設定する、[マイ コードのみ] でステップ実行する、デバッグを停止/再開する、デバッグ対象のプロセスからデタッチする

内容

Start debugging a VS project; attach to a process

Break into code, step or run through code, set the next statement to execute

Stop, restart debugging; detach from the debugged process

VS プロジェクトのデバッグを開始する、プロセスにアタッチする

  • Start debugging a VS project**|**Attach to a process

VS プロジェクトのデバッグを開始する

ソリューションを Visual Studio で開いているとき、デバッグを開始するには次の 3 つの選択肢があります。

[デバッグ][デバッグ開始] の順にクリックします (キーボード: F5)。

アプリが起動され、次の状態になるまで実行されます。

  • デバッガーがブレークポイントに達する。

  • [デバッグ] メニューの [デバッグの停止] をクリックする。

  • 例外がスローされる。

  • アプリが終了する。

[デバッグ][ステップ イン] の順にクリックするか (キーボード: F11)、[デバッグ][ステップ オーバー] の順にクリックします (キーボード: F10)。

アプリが起動され、最初の行で中断されます。

ソース ウィンドウで、実行可能なコード行を選択し、コンテキスト メニューの [カーソル行の前まで実行] をクリックします。

アプリが起動され、ブレークポイントまたはカーソル位置のどちらかに達するまで実行されます。

デバッグ中にコード マップでコードの実行を視覚的にトレースするには、「Visual Studio でデバッグを行うときの呼び出し履歴に対するメソッドのマップ」を参照してください。

ページのトップへContents | Start debugging a VS project; attach to a process

プロセスにアタッチする

デバッガーは、Visual Studio の外部プロセスで実行されているプログラムにもアタッチできます。 プログラムにアタッチした後、デバッガーの実行コマンドを使用したり、プログラムの状態をチェックしたりできます。 プログラムのチェック機能は、デバッグ情報付きでビルドされたプログラムかどうか、プログラムのソース コードにアクセスできるかどうか、および共通言語ランタイムの JIT コンパイラがデバッグ情報を追跡しているかどうかによって限定される場合があります。

ローカル コンピューター上で実行されているプロセスにアタッチするには

[デバッグ][プロセスにアタッチ] の順にクリックします。 [プロセスにアタッチ] ダイアログ ボックスの [選択可能なプロセス] ボックスの一覧で、アタッチするプロセスを選択し、[アタッチ] をクリックします。

[プロセスにアタッチ] ダイアログ ボックス

詳細については、「実行中のプロセスへのアタッチ」を参照してください。

ページのトップへContents | Start debugging a VS project; attach to a process

コードを中断する、コードをステップ実行または特定の位置まで実行する、次に実行されるステートメントを設定する

  • Break into code by using breakpoints or Break All**|Step into, over, or out of the code|Run to a specified location or function|Set the next statement to execute|Restrict stepping to Just My Code|Step into system calls|**Step into properties and operators in managed code

ブレークポイントまたは [すべて中断] を使用してコードを中断する

VS デバッガーでのデバッグ中は、アプリケーションは実行中か中断モードになっています。

デバッガーは、ブレークポイントに達するか例外が発生すると、アプリの実行を中断します。 また、実行はいつでも手動で中断できます。

"ブレークポイント" は、デバッガーに対して、特定の位置でアプリの実行を一時停止するように指示します。 ブレークポイントで実行が中断されると、プログラムは中断モードになります。 中断モードになっても、プログラムの実行は停止も終了もしません。いつでも実行を再開できます。

[ローカル] ウィンドウでの変数値の表示や [ウォッチ] ウィンドウでの式の評価など、デバッガーのほとんどの機能は、中断モードでのみ使用できます。 アプリのすべての要素はそのままの状態です (たとえば、関数、変数、およびオブジェクトはそのままメモリに残されます) が、移動や動作は中断されます。 中断モードでは、要素の位置と状態を検証して、違反やバグを探すことができます。 アプリの調整も中断モードで行うことができます。

多くの条件に基づいて実行を中断するためのブレークポイントを構成できます。 「ブレークポイントとトレースポイントの使用」を参照してください。 このセクションでは、コードを中断するための 2 つの基本的な方法について説明しています。

コードにブレークポイントを設定する

コードに単純なブレークポイントを設定するには、Visual Studio エディターでソース ファイルを開きます。 中断するコード行にカーソルを置き、コンテキスト メニューで [ブレークポイント][ブレークポイントの挿入] の順にクリックします (キーボード: F9)。 その行が実行される直前でデバッガーは実行を中断します。

ブレークポイントの設定

Visual Studio でのブレークポイントには、条件付きブレークポイントやトレースポイントなど、さまざまな追加の機能が用意されています。 「ブレークポイントとトレースポイントの使用」を参照してください。

コードを手動で中断する

実行中のアプリで次に実行されるコード行で実行を中断するには、[デバッグ][すべて中断] の順にクリックします (キーボード: Ctrl+Alt+Break)。

  • [マイ コードのみ] を有効にしてデバッグしている場合は、プロジェクトのコードの次の行で実行が中断されます。 「Restrict stepping to Just My Code」を参照してください。

  • 複数のプログラムをデバッグしている場合、ブレークポイントまたは [すべて中断] は、既定では、デバッグ中のすべてのプログラムに影響します。 「Configure the execution behavior of multiple processes」を参照してください。

  • 対応付けられたソースまたはシンボル (.pdf ファイル) ファイルがないため、コードの実行が中断された場合は、デバッガーによって [ソース ファイルが見つかりません] または [シンボルが見つかりません] ページが表示され、該当するファイルを見つけるために役立ちます。 「シンボル (.pdb) ファイル、ソース ファイル、およびバイナリ ファイルの検索」を参照してください。

    それらのサポート ファイルにアクセスできない場合は、[逆アセンブル] ウィンドウでアセンブリ命令をデバッグできます。

ページのトップへContents | Break into code, step or run through code, set the next statement to execute

コードをステップ イン、ステップ オーバー、ステップ アウトする

最も一般的なデバッグ手順の 1 つとしてステップ実行があります。 ステップ実行では、1 回に 1 行のコードを実行します。 実行を停止したら (たとえばデバッガーをブレークポイントまで実行したら)、[デバッグ] メニューの 3 つのコマンドを使用してコードをステップ実行できます。

メニュー コマンド

ショートカット キー

説明

[ステップ イン]

F11

行に関数呼び出しが含まれている場合は、[ステップ イン] をクリックすると、呼び出しだけを実行した後、関数内の最初のコード行で停止します。 それ以外の場合、[ステップ イン] は次に実行されるステートメントに進みます。

[ステップ オーバー]

F10

行に関数呼び出しが含まれている場合は、[ステップ オーバー] をクリックすると、呼び出し先の関数を実行した後、呼び出し元の関数内の最初のコード行で停止します。 それ以外の場合、[ステップ イン] は次に実行されるステートメントに進みます。

[ステップ アウト]

Shift+F11

[ステップ アウト] は、コードの実行を再開し、関数から値が返されると呼び出し元の関数内の値が返された位置で実行を中断します。

  • 入れ子になった関数呼び出しの場合は、[ステップ イン] をクリックすると、一番内側にある入れ子になった関数にステップ インします。 Func1(Func2()) のような呼び出しに [ステップ イン] を使用すると、デバッガーは関数 Func2 にステップ インします。

  • デバッガーは実際、物理的な行ではなくコード ステートメントをステップ実行します。 たとえば、if 句は 1 行で記述できます。

    int x = 42;
    string s = "Not answered";
    if( int x == 42) s = "Answered!";
    
    Dim x As Integet = 42
    Dim s As String = "Not answered"
    If x = 42 Then s = "Answered!"
    

    この行にステップ インすると、デバッガーは条件を 1 つのステップとして、結果を別のステップとして扱います (この例では条件は true)。

関数へのステップ イン中に呼び出し履歴を視覚的にトレースするには、「Visual Studio でデバッグを行うときの呼び出し履歴に対するメソッドのマップ」を参照してください。

ページのトップへContents | Break into code, step or run through code, set the next statement to execute

指定した位置または関数まで実行する

コード内の特定の位置まで実行した後に実行を停止することが必要になる場合があります。 中断する位置にブレークポイントを設定した場合は、[デバッグ][デバッグ開始] の順にクリックするか (デバッグをまだ開始していないとき)、[デバッグ][続行] の順にクリックします (いずれの場合も F5 キーがショートカット キー)。 コードが実行されて、デバッガーは次のブレークポイントで停止します。 目的のブレークポイントに達するまで [デバッグ][続行] の順にクリックします。

コード エディターでカーソルを置いた位置まで実行することも、指定した関数まで実行することもできます。

カーソル位置まで実行する

カーソル位置まで実行するには、ソース ウィンドウで実行可能なコード行にカーソルを置きます。 エディターのコンテキスト メニューの [カーソル行の前まで実行] をクリックします。

呼び出し履歴の関数まで実行する

[呼び出し履歴] ウィンドウで関数を選択し、コンテキスト メニューの [カーソル行の前まで実行] をクリックします。 呼び出し履歴を視覚的にトレースするには、「Visual Studio でデバッグを行うときの呼び出し履歴に対するメソッドのマップ」を参照してください。

名前で指定した関数まで実行する

デバッガーに対して、指定した関数に達するまでアプリケーションを実行するように指示できます。 関数は名前で指定することも、呼び出し履歴から選択することもできます。

名前で関数を指定するには、[デバッグ][ブレークポイントの作成][関数でブレーク] の順にクリックし、関数の名前などの識別情報を入力します。

[ブレークポイントの作成] ダイアログ ボックス

関数がオーバーロードされるか、複数の名前空間にある場合は、[ブレークポイントの選択] ダイアログ ボックスで目的の関数を選択できます。

[ブレークポイントの選択] ダイアログ ボックス

ページのトップへContents | Break into code, step or run through code, set the next statement to execute

次に実行されるステートメントを設定する

デバッガーを中断した後、実行ポイントを移動して、コードの次に実行されるステートメントを設定できます。 ソース ウィンドウまたは [逆アセンブル] ウィンドウのマージンに表示される黄色の矢印は、次に実行されるステートメントの位置を示します。 この矢印を移動すると、コードの一部をスキップしたり、前に実行した行に戻ったりできます。 既知のバグを含むコードのセクションをスキップするなどの場合に利用できます。

Example2

次に実行されるステートメントを設定するには、次のいずれかの手順を使用します。

  • ソース ウィンドウで、同じソース ファイル内の次に実行されるステートメントを設定する位置に黄色の矢印をドラッグします。

  • ソース ウィンドウで、次に実行される行にカーソルを置き、コンテキスト メニューの [次のステートメントの設定] をクリックします。

  • [逆アセンブル] ウィンドウで、次に実行するアセンブリ命令にカーソルを置き、コンテキスト メニューの [次のステートメントの設定] をクリックします。

注意

次に実行するステートメントを設定すると、プログラム カウンターは新しい位置に直接ジャンプします。このコマンドは慎重に使用する必要があります。

  • 前の実行ポイントから新しい実行ポイントまでの間の命令は実行されません。

  • 実行ポイントを後方に移動すると、その間の命令が実行されます。

  • 次に実行するステートメントを別の関数やスコープに移動すると、一般に呼び出し履歴が破損し、実行時エラーや例外が発生する原因になります。次に実行するステートメントを別のスコープに移動しようとすると、デバッガーの警告ダイアログ ボックスが表示され、操作をキャンセルできます。Visual Basic では、次に実行するステートメントを別のスコープや関数に移動できません。

  • ネイティブ C++ でランタイム チェックを有効にしている場合、次に実行されるステートメントを設定すると、実行がメソッドの最後に到達したときに例外がスローされる可能性があります。

  • エディット コンティニュが有効になっている場合、エディット コンティニュが即座にマップし直すことができない編集が行われると、[次のステートメントの設定] でエラーが発生します。これは、たとえば、catch ブロック内でコードを編集している場合に発生します。エラーが発生した場合、その操作がサポートされていないことを知らせるエラー メッセージが表示されます。

注意

マネージ コードでは、次に実行するステートメントは、以下の場合に移動できません。

  • 次のステートメントが現在のステートメントとは別のメソッドに含まれている場合。

  • デバッグが、Just-In-Time デバッグを使用して開始された場合。

  • 呼び出し履歴のアンワインドが行われている場合。

  • System.StackOverflowException 例外または System.Threading.ThreadAbortException 例外がスローされた場合。

アプリケーションの実行中は、次のステートメントを設定できません。 次に実行するステートメントの設定は、デバッガーの中断モード時に行う必要があります。

ページのトップへContents | Break into code, step or run through code, set the next statement to execute

ステップ実行をマイ コードのみに制限する

デバッグ中に、自分で記述したコードのみを確認して、システム呼び出しなど他の呼び出しを無視したい場合があります。 この場合、"マイ コードのみ" デバッグを使用できます。 "マイ コードのみ" デバッグを使用すると、非ユーザー コードは非表示になり、デバッガー ウィンドウに表示されません。 ステップ実行すると、非ユーザー コードをステップ実行しますが、非ユーザー コード内では停止しません。 「Just My Code」を参照してください。

注意

"マイ コードのみ" デバッグは、デバイス プロジェクトではサポートされません。

ページのトップへContents | Break into code, step or run through code, set the next statement to execute

システム コールにステップ インする

[マイ コードのみ] が有効でない状態でシステム コードのデバッグ シンボルを読み込んだ場合は、他の呼び出しと同様にシステム コールにステップ インできます。

マイ コードのみを無効にする方法については、「Restrict stepping to Just My Code」を参照してください。

Microsoft シンボル ファイルにアクセスするには、「シンボル (.pdb) ファイル、ソース ファイル、およびバイナリ ファイルの検索」トピックの「Use symbol servers to find symbol files not on your local machine」を参照してください。

デバッグ中に特定のシステム コンポーネントのシンボルを読み込むには:

  1. [モジュール] ウィンドウを開きます (キーボード: Ctrl+Alt+U)。

  2. シンボルを読み込むモジュールを選択します。

    [シンボルの状態] 列により、シンボルが読み込まれたモジュールを確認できます。

  3. コンテキスト メニューの [シンボルの読み込み] をクリックします。

ページのトップへContents | Break into code, step or run through code, set the next statement to execute

マネージ コード内のプロパティと演算子にステップ インする

デバッガーは既定ではマネージ コード内のプロパティと演算子をステップ オーバーします。 ほとんどの場合、これにより正しくデバッグを実行できます。 プロパティと演算子へのステップ インを有効にするには、[デバッグ][オプションと設定] の順にクリックします。 [デバッグ]/[全般] ページで、[プロパティおよび演算子をステップ オーバーする (マネージのみ)] チェック ボックスをオフにします。

ページのトップへContents | Break into code, step or run through code, set the next statement to execute

デバッグを停止/再開する、デバッグ対象のプロセスからデタッチする

デバッグを停止すると、デバッグ セッションが停止します。 実行を停止すると、デバッグ中のプロセスが停止し、デバッグ セッションが終了します。 実行の中断と混同しないでください。実行を中断すると、デバッグ中のプロセスの実行は一時的に停止しますが、デバッグ セッションはアクティブなままです プロセスからデタッチすると、プロセスのデバッグは停止しますが、プロセスは実行されたままになります。

  • Stop debugging from VS**|Close the app that is being debugged|Restart debugging|**Detach from the debugged app

VS からデバッグを停止する

プログラムが Visual Studio から実行されている場合、[デバッグ][デバッグの停止] の順にクリックすると、デバッグ中のプロセスが終了します。 Visual Studio から実行されるのではなく、プロセスにアタッチしている場合、プロセスは継続して実行されます。

ページのトップへContents | Stop, restart debugging; detach from the debugged process

デバッグ中のアプリを閉じる

デバッグ中のアプリを終了すると、デバッグは自動的に停止します。

デバッグを再開する

[デバッグ][再起動] の順にクリックすると、現在のデバッグ セッションが停止し、デバッガーでスタートアップ プロジェクトが再起動されます。

ページのトップへContents | Stop, restart debugging; detach from the debugged process

デバッグ中のアプリからデタッチする

[デバッグ]、[すべてデタッチ] の順にクリックするとデバッグが停止しますが、デバッグ対象のプロセスは実行されたままになります。

ヒント

Visual Studio での複数のプロセスに対するアタッチと制御の詳細については、「実行中のプロセスへのアタッチ」および「Visual Studio での 1 つ以上のプロセスのデバッグ」を参照してください。

ページのトップへContents | Stop, restart debugging; detach from the debugged process