Visual Studio デバッガーでコード間を移動するNavigate through code with the Visual Studio debugger

Visual Studio デバッガーを使用すると、コード間を移動してアプリの状態を調査し、その実行フローを表示することができます。The Visual Studio debugger can help you navigate through code to inspect the state of an app and show its execution flow. キーボード ショートカット、デバッグ コマンド、ブレークポイントなどの機能を使用して、調べるコードにすばやく移動できます。You can use keyboard shortcuts, debug commands, breakpoints, and other features to quickly get to the code you want to examine. デバッガーのナビゲーション コマンドやショートカットを使い慣れることで、アプリの問題をすばやく見つけて解決することができます。Familiarity with debugger navigation commands and shortcuts makes it faster and easier to find and resolve app issues. コードのデバッグを試みるのが今回初めてである場合は、この記事を先に進む前に「入門者向けのデバッグ」および「デバッグの技術とツール」を参照することをお勧めします。If this is the first time that you've tried to debug code, you may want to read Debugging for absolute beginners and Debugging techniques and tools before going through this article.

"中断モード" に移行するGet into "break mode"

"中断モード" では、関数、変数、オブジェクトをメモリに保持したまま、アプリの実行が中断されます。In break mode, app execution is suspended while functions, variables, and objects remain in memory. デバッガーが中断モードになったら、コード間を移動できます。Once the debugger is in break mode, you can navigate through your code. 中断モードにすばやく移行する最も一般的な方法は、次のいずれかです。The most common ways to get into break mode quickly is to either:

  • F10 キーまたは F11 キーを押して、コードのステップ実行を開始します。Begin code stepping by pressing F10 or F11. これにより、アプリのエントリ ポイントをすばやく見つけることができ、その後、ステップ コマンドを使用してコード間を移動することができます。This allows you to quickly find the entry point of your app, then you can continue pressing step commands to navigate code.

  • 特定の場所または関数まで実行します。たとえば、ブレークポイントを設定して、アプリを開始します。Run to a specific location or function, for example, by setting a breakpoint and starting your app.

    たとえば、Visual Studio のコード エディターでは、 [カーソル行の前まで実行] コマンドを使用してアプリを起動し、デバッガーをアタッチして、中断モードにし、F11 キーを押してコード間を移動できます。For example, from the code editor in Visual Studio, you can use the Run to Cursor command to start the app, debugger attached, and get into break mode, then F11 to navigate code.

    カーソル行の前まで実行してコードにステップインするRun to cursor and step into code

中断モードになったら、さまざまなコマンドを使用してコード間を移動できます。Once in break mode, you can use a variety of commands to navigate through your code. 中断モードでは、変数の値を調べて、違反やバグを探すことができます。While in break mode, you can examine the values of variables to look for violations or bugs. 一部のプロジェクトの種類では、中断モードでアプリの調整を行うこともできます。For some project types, you can also make adjustments to the app while in break mode.

[モジュール] ウィンドウや [ウォッチ] ウィンドウなど、ほとんどのデバッガー ウィンドウは、デバッガーがアプリにアタッチされている場合にのみ使用できます。Most debugger windows, like the Modules and Watch windows, are available only while the debugger is attached to your app. [ローカル] ウィンドウでの変数値の表示や [ウォッチ] ウィンドウでの式の評価など、デバッガーの一部の機能は、デバッガーが一時停止している間 (つまり中断モード) だけ使用できます。Some debugger features, such as viewing variable values in the Locals window or evaluating expressions in the Watch window, are available only while the debugger is paused (that is, in break mode).

注意

ソース ファイルやシンボル ( .pdb) ファイルが読み込まれていないコードで中断した場合、デバッガーには [ソース ファイルが見つかりません] または [シンボルが見つかりません] ページが表示され、ファイルを見つけて読み込むのに役立ちます。If you break into code that doesn't have source or symbol (.pdb) files loaded, the debugger displays a Source Files Not Found or Symbols Not Found page that can help you find and load the files. シンボル (.pdb) ファイルとソース ファイルの指定に関する記事をご覧ください。See Specify symbol (.pdb) and source files. シンボル ファイルまたはソース ファイルを読み込むことができない場合でも、 [逆アセンブル] ウィンドウでアセンブリ命令をデバッグできます。If you can't load the symbol or source files, you can still debug the assembly instructions in the Disassembly window.

コードのステップ実行Step through code

デバッガーのステップ コマンドを使用すると、アプリの状態を調べたり、実行フローの詳細を確認したりすることができます。The debugger step commands help you inspect your app state or find out more about its execution flow.

コードを 1 行ずつステップインするStep into code line by line

デバッグ中に各ステートメントで実行を停止するには、 [デバッグ] > [ステップ イン] を使用するか、F11 キーを押します。To stop on each statement while debugging, use Debug > Step Into, or press F11.

デバッガーでは、物理的な行ではなく、コード ステートメントがステップ実行されます。The debugger steps through code statements, not physical lines. たとえば、if 句は 1 行で記述できます。For example, an if clause can be written on one line:

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

ただし、この行にステップ インすると、デバッガーでは条件を 1 つのステップとし、結果は別のステップとして扱われます。However, when you step into this line, the debugger treats the condition as one step, and the consequence as another. 前の例では、条件は true になっります。In the preceding example, the condition is true.

入れ子になった関数呼び出しの場合は、 [ステップ イン] をクリックすると、一番内側にある入れ子になった関数にステップ インします。On a nested function call, Step Into steps into the most deeply nested function. たとえば、Func1(Func2()) のような呼び出しに [ステップ イン] を使用すると、デバッガーは関数 Func2 にステップ インします。For example, if you use Step Into on a call like Func1(Func2()), the debugger steps into the function Func2.

ヒント

各コード行を実行しながら、変数をポイントして値を表示したり、[ローカル] ウィンドウや [ウォッチ] ウィンドウを使用して値の変化を監視したりできます。As you execute each line of code, you can hover over variables to see their values, or use the Locals and Watch windows to watch the values change. また、関数にステップ インしている間に呼び出し履歴を視覚的にトレースすることもできます。You can also visually trace the call stack while stepping into functions. (Visual Studio Enterprise の場合のみ、デバッグを行うときの呼び出し履歴に対するメソッドのマップに関するページを参照してください)。(For Visual Studio Enterprise only, see Map methods on the call stack while debugging).

コードをステップ実行し、一部の関数をスキップするStep through code and skip some functions

デバッグ中に関数が気にならない場合や、適切にテストされたライブラリ コードのように動作することがわかっている場合があります。You may not care about a function while debugging, or you know it works, like well-tested library code. 次のコマンドを使用すると、コードのステップ実行中にコードをスキップできます。You can use the following commands to skip code while code stepping. 関数は依然として実行されますが、デバッガーではそれらはスキップされます。The functions still execute, but the debugger skips over them.

キーボード コマンドKeyboard command [デバッグ] メニューのコマンドDebug menu command 説明Description
F10F10 [ステップ オーバー]Step Over 現在の行に関数呼び出しが含まれている場合、 [ステップ オーバー] を使用すると、そのコードが実行された後、呼び出された関数から制御が戻った後の最初のコード行で、実行が中断されます。If the current line contains a function call, Step Over runs the code, then suspends execution at the first line of code after the called function returns.
Shift+F11Shift+F11 [ステップ アウト]Step Out [ステップ アウト] では、コードの実行が継続され、現在の関数から制御が戻ったときに実行が中断されます。Step Out continues running code and suspends execution when the current function returns. デバッガーでは現在の関数はスキップされます。The debugger skips through the current function.

特定の場所または関数まで実行するRun to a specific location or function

調査対象のコードが正確にわかっている場合や、デバッグを開始する場所がわかっている場合は、特定の場所または関数まで直接実行するのが望ましいことがあります。You may prefer to run directly to a specific location or function when you know exactly what code you want to inspect, or you know where you want to start debugging.

コード内にブレークポイントまで実行するRun to a breakpoint in code

コードに単純なブレークポイントを設定するには、実行を中断するコード行の左端の余白をクリックします。To set a simple breakpoint in your code, click the far left margin next to the line of code where you want to suspend execution. 行を選択して、F9 キーを押すか、 [デバッグ] > [ブレークポイントの設定/解除] を選択するか、右クリックして [ブレークポイント] > [ブレークポイントの挿入] を選択することもできます。You can also select the line and press F9, select Debug > Toggle Breakpoint, or right-click and select Breakpoint > Insert Breakpoint. コード行の左横の余白に、ブレークポイントが赤い点として表示されます。The breakpoint appears as a red dot in the left margin next to the code line. デバッガーは、その行が実行される直前で実行を中断します。The debugger suspends execution just before the line executes.

ブレークポイントを設定するSet a breakpoint

Visual Studio でのブレークポイントには、条件付きブレークポイントやトレースポイントなど、さまざまな追加の機能が用意されています。Breakpoints in Visual Studio provide a rich set of additional functionality, such as conditional breakpoints and tracepoints. 詳細については、ブレークポイントの使用に関するページを参照してください。For details, see Using breakpoints.

関数のブレークポイントまで実行するRun to a function breakpoint

デバッガーに対して、指定した関数に達するまで実行するように指示できます。You can tell the debugger to run until it reaches a specified function. 関数は名前で指定することも、呼び出し履歴から選択することもできます。You can specify the function by name, or you can choose it from the call stack.

関数のブレークポイントを名前で指定するにはTo specify a function breakpoint by name

  1. [デバッグ] > [新しいブレークポイント] > [関数のブレークポイント] を選択しますSelect Debug > New Breakpoint > Function Breakpoint

  2. [新しい関数のブレークポイント] ダイアログで、関数の名前を入力し、その言語を選択します。In the New Function Breakpoint dialog, type the name of the function and select its language.

    [新しい関数のブレークポイント] ダイアログ ボックスNew Function Breakpoint dialog box

  3. [OK] を選択します。Select OK.

関数がオーバーロードされている場合、または複数の名前空間にある場合は、 [ブレークポイント] ウィンドウで目的の関数を選択できます。If the function is overloaded or in more than one namespace, you can choose the one you want in the Breakpoints window.

オーバーロードされた関数のブレークポイントOverloaded function breakpoints

呼び出し履歴から関数のブレークポイントを選択するにはTo select a function breakpoint from the call stack

  1. デバッグ中に、 [デバッグ] > [ウィンドウ] > [呼び出し履歴] を選択して、 [呼び出し履歴] ウィンドウを開きます。While debugging, open the Call Stack window by selecting Debug > Windows > Call Stack.

  2. [呼び出し履歴] ウィンドウで関数を右クリックし、 [カーソル行の前まで実行] を選択するか、Ctrl + F10 キーを押します。In the Call Stack window, right-click a function and select Run To Cursor, or press Ctrl+F10.

呼び出し履歴を視覚的にトレースするには、デバッグを行うときの呼び出し履歴に対するメソッドのマップに関するページを参照してください。To visually trace the call stack, see Map methods on the call stack while debugging.

カーソル位置まで実行するRun to a cursor location

カーソル位置まで実行するには、ソース コードまたは [呼び出し履歴] ウィンドウで、中断する行を選択して右クリックし、 [カーソル行の前まで実行] を選択するか、Ctrl + F10 キーを押します。To run to the cursor location, in source code or the Call Stack window, select the line you want to break at, right-click and select Run To Cursor, or press Ctrl+F10. [カーソル行の前まで実行] を選択するのは、一時的なブレークポイントを設定するのと似ています。Selecting Run To Cursor is like setting a temporary breakpoint.

[Run To Click (クリックで実行)]Run to Click

デバッガーで一時停止している間に、ソース コードまたは [逆アセンブリ] ウィンドウでステートメントをポイントし、 [ここまで実行します] の緑色の矢印アイコンを選択します。While paused in the debugger, you can hover over a statement in source code or the Disassembly window, and select the Run execution to here green arrow icon. [Run to Click](クリックで実行) を使用すると、一時的なブレークポイントを設定する必要がなくなります。Using Run to Click eliminates the need to set a temporary breakpoint.

クリックで実行Run to Click

注意

[Run to Click](クリックで実行)Visual Studio 2017Visual Studio 2017 以降で使用できます。Run to Click is available starting in Visual Studio 2017Visual Studio 2017.

コードを手動で中断するManually break into code

実行中のアプリの次に使用可能なコード行で中断するには、 [デバッグ] > [すべて中断] を選択するか、Ctrl + Alt + Break キーを押します。To break in the next available line of code in a running app, select Debug > Break All, or press Ctrl+Alt+Break.

ポインターを移動して実行フローを変更するMove the pointer to change the execution flow

デバッガーが一時停止しているとき、ソース コードまたは [逆アセンブル] ウィンドウの余白に表示される黄色の矢印は、次に実行されるステートメントの位置を示します。While the debugger is paused, a yellow arrowhead in the margin of the source code or Disassembly window marks the location of the next statement to be executed. この矢印を移動して、次に実行されるステートメントを変更できます。You can change the next statement to execute by moving this arrowhead. コードの一部分をスキップしたり、前の行に戻ったりできます。You can skip over a portion of code, or return to a previous line. ポインターを移動すると、既知のバグを含むコードのセクションをスキップするなどの場合に便利です。Moving the pointer is useful for situations such as skipping a section of code that contains a known bug.

ポインターを移動するMove the pointer

次に実行するステートメントの変更は、デバッガーの中断モード時に行う必要があります。To change the next statement to execute, the debugger must be in break mode. ソース コードまたは [逆アセンブル] ウィンドウで、黄色の矢印を別の行にドラッグするか、次に実行する行を右クリックして [次のステートメントの設定] を選択します。In the source code or Disassembly window, drag the yellow arrowhead to a different line, or right-click the line you want to execute next and select Set Next Statement.

プログラム カウンターは、新しい場所まで直接ジャンプします。古い実行ポイントと新しい実行ポイントの間の命令は実行されません。The program counter jumps directly to the new location, and instructions between the old and new execution points aren't executed. ただし、実行ポイントを後方に移動した場合、その間の命令が元に戻されることはありません。However, if you move the execution point backwards, the intervening instructions aren't undone.

注意事項

  • 次に実行するステートメントを別の関数やスコープに移動すると、一般に呼び出し履歴が破損し、実行時エラーや例外が発生する原因になります。Moving the next statement to another function or scope usually results in call-stack corruption, causing a run-time error or exception. 次に実行するステートメントを別のスコープに移動しようとすると、デバッガーの警告ダイアログ ボックスが表示され、操作をキャンセルできます。If you try moving the next statement to another scope, the debugger opens a dialog box with a warning and gives you a chance to cancel the operation.
  • Visual Basic では、次に実行するステートメントを別のスコープや関数に移動できません。In Visual Basic, you cannot move the next statement to another scope or function.
  • ネイティブ C++ でランタイム チェックを有効にしている場合、次に実行されるステートメントを設定すると、実行がメソッドの最後に到達したときに例外がスローされる可能性があります。In native C++, if you have run-time checks enabled, setting the next statement can cause an exception to be thrown when execution reaches the end of the method.
  • エディット コンティニュが有効になっている場合、エディット コンティニュが即座にマップし直すことができない編集が行われると、 [次のステートメントの設定] でエラーが発生します。When Edit and Continue is enabled, Set Next Statement fails if you have made edits that Edit and Continue cannot remap immediately. これは、たとえば、catch ブロック内でコードを編集している場合に発生します。This can occur, for example, if you have edited code inside a catch block. このエラーが発生すると、その操作がサポートされていないことを知らせるエラー メッセージが表示されます。When this happens, an error message tells you that the operation is not supported.
  • マネージド コードでは、以下の場合、次に実行するステートメントは移動できません。In managed code, you cannot move the next statement if:
    • 次のステートメントが現在のステートメントとは別のメソッドに含まれている場合。The next statement is in a different method than the current statement.
    • デバッグが、Just-In-Time デバッグによって開始された場合。Debugging was started by Just-In-Time debugging.
    • 呼び出し履歴のアンワインドが行われている場合。A call stack unwind is in progress.
    • System.StackOverflowException 例外または System.Threading.ThreadAbortException 例外がスローされた場合。A System.StackOverflowException or System.Threading.ThreadAbortException exception has been thrown.

非ユーザー コードをデバッグするDebug non-user code

既定の状態のデバッガーでは、"マイ コードのみ" と呼ばれる設定を有効にすることにより、アプリ コードのみのデバッグが試みられます。By default, the debugger tries to debug only your app code by enabling a setting called Just My Code. この機能が異なるプロジェクトの種類および言語に対してどのように機能するか、およびそれをカスタマイズする方法の詳細については、マイ コードのみに関するページを参照してください。For more details about how this feature works for different project types and languages, and how you can customize it, see Just My Code.

デバッグ中にフレームワークのコード、サードパーティのライブラリ コード、またはシステム呼び出しを調べるには、"マイ コードのみ" を無効にします。To look at framework code, third-party library code, or system calls while debugging, you can disable Just My Code. [ツール] (または [デバッグ] ) > [オプション] > [デバッグ中] で、 [マイ コードのみを有効にする] チェック ボックスをオフにします。In Tools (or Debug) > Options > Debugging, clear the Enable Just My Code check box. "マイ コードのみ" が無効になっている場合、デバッガー ウィンドウに非ユーザー コードが表示され、デバッガーは非ユーザー コードにステップ インできます。When Just My Code is disabled, non-user code appears in the debugger windows, and the debugger can step into the non-user code.

注意

"マイ コードのみ" デバッグは、デバイス プロジェクトではサポートされません。Just My Code is not supported for device projects.

システム コードをデバッグするDebug system code

Microsoft システム コードのデバッグ シンボルが読み込まれていて、"マイ コードのみ" が無効になっている場合は、他の呼び出しと同様にシステム コールにステップ インできます。If you have loaded debugging symbols for Microsoft system code, and disabled Just My Code, you can step into a system call just as you can any other call.

Microsoft のシンボルを読み込む方法については、「シンボルの場所と読み込みオプションを構成する」を参照してください。To load Microsoft symbols, see Configure symbol locations and loading options.

特定のシステム コンポーネントのシンボルを読み込むには:To load symbols for a specific system component:

  1. デバッグ中に、 [デバッグ] > [ウィンドウ] > [モジュール] を選択するk、Ctrl + Alt + U キーを押して、 [モジュール] ウィンドウを開きます。While you're debugging, open the Modules window by selecting Debug > Windows > Modules, or pressing Ctrl+Alt+U.

  2. [モジュール] ウィンドウの [シンボルの状態] 列で、シンボルが読み込まれているモジュールを確認できます。In the Modules window, you can tell which modules have symbols loaded in the Symbol Status column. シンボルを読み込むモジュールを右クリックして、 [シンボルの読み込み] を選択します。Right-click the module that you want to load symbols for, and select Load Symbols.

マネージド コード内のプロパティと演算子にステップ インするStep into properties and operators in managed code

デバッガーは既定ではマネージド コード内のプロパティと演算子をステップ オーバーします。The debugger steps over properties and operators in managed code by default. ほとんどの場合、これにより正しくデバッグを実行できます。In most cases, this provides a better debugging experience. プロパティまたは演算子へのステップ インを有効にするには、 [デバッグ] > [オプション] を選択します。To enable stepping into properties or operators, choose Debug > Options. [デバッグ] > [全般] ページで、 [プロパティおよび演算子をステップ オーバーする (マネージドのみ)] チェック ボックスをオフにします。On the Debugging > General page, clear the Step over properties and operators (Managed only) check box.

関連項目See also