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).

Note

ソースファイルまたはシンボル ( .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.

コードを行ごとにステップインする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.

Tip

各コード行を実行すると、変数の上にマウスポインターを移動して値を表示したり、[ローカル] ウィンドウと [ウォッチ] ウィンドウを使用して値の変更を確認したりすることができます。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. デバッグ中に [デバッグ > Windows > 呼び出し履歴] を選択して [呼び出し履歴] ウィンドウを開きます。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. [実行] をクリックすると、一時的なブレークポイントを設定する必要がなくなります。Using Run to Click eliminates the need to set a temporary breakpoint.

クリックで実行Run to Click

Note

[実行] をクリックすると、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.

Caution

  • 次に実行するステートメントを別の関数やスコープに移動すると、一般に呼び出し履歴が破損し、実行時エラーや例外が発生する原因になります。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.

Note

"マイ コードのみ" デバッグは、デバイス プロジェクトではサポートされません。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. デバッグ中に [モジュール] ウィンドウを開くには、[デバッグ > Windows > モジュール] を選択するか、 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