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

このトピックの内容

このトピックの内容

デバッグの開始

  • プロセスにアタッチ

  • 自動的にデバッガーでアプリケーションを起動します。

デバッグ セッションのコードを移動します。

  • コードにブレークポイントの使用によって中断またはすべてを中断

  • コードに、またはからステップ インします。

  • 指定された位置または関数の実行

  • 実行する次のステートメントを設定します。

  • マイ コードのみステップ実行に Restrict

  • システム コールにステップ インします。

  • マネージ コード内のプロパティおよび演算子にステップ インします。

デバッグを停止します

デバッグの開始

ソリューションが開いている場合、Visual Studio は、デバッグを開始する 3 とおりの方法があります:

[デバッグ][デバッグの開始] (キーボードを選択する: F5)。

独自のアプリケーションの開始まで実行され、その後は:

  • デバッガーでは、ブレークポイントに到達します。

  • [デバッグ] のメニューの [デバッグの停止] を選択します。

  • 例外がスローされます。

  • アプリケーションの終了。

[デバッグ][ステップ イン] (キーボードを選択する: F11) または [デバッグ][ステップ オーバー] (キーボード: F10)。

最初の行のアプリケーションの開始と休憩。

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

最初にある、どのでも、ブレークポイントまたはカーソル位置に到達するまで、アプリケーションが起動して実行されます。

y740d9d3.collapse_all(ja-jp,VS.110).gifプロセスにアタッチ

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

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

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

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

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

y740d9d3.collapse_all(ja-jp,VS.110).gif自動的にデバッガーでアプリケーションを起動します。

場合によって、別のプロセスで起動されたアプリケーションのスタートアップ コードをデバッグすることがあります。たとえば、サービスやカスタムのセットアップ動作などです。このような場合、アプリケーションの起動時にデバッガーを起動して自動的にアタッチできます。

  1. レジストリ エディター (regedit.exe) を起動します。

  2. HKEY_LOCAL_MACHINE\Software\Microsoft\Windows ファイル NT\CurrentVersion\Image 実行オプション のフォルダーに移動します。

  3. デバッガーで、開始するアプリケーションのフォルダーを選択します。

    アプリケーションの名前が子フォルダーとして一覧で、を選択します [Image File Execution Options] は、[新規作成]、ショートカット メニューの [キー] を選択します。新しいキーを選択し、ショートカット メニューの [名前の変更] を選択し、次にアプリケーションの名前を入力します。

  4. アプリケーションのフォルダーのショートカット メニューで、[新規作成][文字列の値] を選択します。

  5. New Value から デバッガーに新しい値の名前を変更します。

  6. デバッガーのエントリのショートカット メニューで、[変更] を選択します。

  7. 文字列を編集]ダイアログ ボックス [値のデータ]、ボックスに" [vsjitdebugger.exe]。

    [文字列の編集] ダイアログ ボックス

regedit.exe の自動デバッガー開始エントリ

このトピックの内容

デバッグ セッションのコードを移動します。

y740d9d3.collapse_all(ja-jp,VS.110).gifコードにブレークポイントの使用によって中断またはすべてを中断

Visual Studio デバッガーでアプリケーションをデバッグする場合、アプリケーションは実行中か、または中断モードになっています。

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

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

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

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

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

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

ブレークポイントの設定

Visual Studio のブレークポイントは条件付きブレークポイントとトレースポイントなどの追加機能の豊富なセットを提供します。「ブレークポイントとトレースポイントの使用」を参照してください。

手動でコードに中断

実行アプリケーションの次回使用可能なコード行に分割するには、[デバッグ][すべて中断] (キーボードを選択する: Ctrl+Alt+Break)。

  • 有効な"マイ コードのみ"デバッグ オプションで、プロジェクトに次のコード行で実行を中断します。「Restrict stepping to Just My Code」を参照してください。

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

  • コードを対応するソースまたはシンボル (.pdb) ファイルを使用せずに実行中に中断)、デバッガーは適切なファイルを検索するときに役立つ [Symbols Not Found] のページまたは [Source Files Not Found] を表示します。「シンボル (.pdb) ファイル、ソース ファイル、およびバイナリ ファイルの検索」を参照してください。

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

y740d9d3.collapse_all(ja-jp,VS.110).gifコードに、またはからステップ インします。

最も一般的なデバッグ手順の 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 になります)。

y740d9d3.collapse_all(ja-jp,VS.110).gif指定された位置または関数の実行

場合によっては、コード内の特定の位置まで実行し、次に実行を中断します。中断する位置にブレークポイントが設定されている場合は、デバッグを開始していない場合、または [デバッグ][続行] を選択します。[デバッグ][デバッグの開始]。(いずれの場合も F5 は、ショートカット キーがあります)。デバッガーは、コード実行の次のブレークポイントで実行が停止します。目的のブレークポイントに達するまで [デバッグ][続行] を選択します。このトピックの Set breakpoints in the code を参照してください。

コード エディターにカーソルをどこに設定、または指定した関数まで実行できます。または、実行

カーソル位置まで実行

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

コール スタックの関数に移動します。

[呼び出し履歴] のウィンドウで関数を選択し、コンテキスト メニューの [カーソル行の前まで実行] を選択します。

名前で指定された関数を実行します。

デバッガーに対して、指定した関数に達するまでアプリケーションを実行するように指示できます。関数を名前で指定するか、コール スタックから選択できます。

関数を名前で指定するには、関数およびそのほかの識別情報の名前を入力するには [デバッグ][ブレークポイントの作成][関数でブレーク] を選択します。

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

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

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

y740d9d3.collapse_all(ja-jp,VS.110).gif実行する次のステートメントを設定します。

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

Example2

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

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

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

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

Caution メモ注意

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

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

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

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

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

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

[!メモ]

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

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

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

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

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

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

y740d9d3.collapse_all(ja-jp,VS.110).gifマイ コードのみステップ実行に Restrict

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

"マイ コードのみ"デバッグを有効または無効にするには、[デバッグ][オプションと設定] を選択します。[デバッグ] で、[全般] のページは、[マイ コードのみを有効にする] をオンまたはオフにします。

と非ユーザー コードを区別するために、"マイ コードのみ"デバッグは、シンボル (PDB) ファイル、プログラム最適化が表示されます。

標準的なデバッグ ビルドの場合、最適化はオフにされ、デバッグ シンボルがすべてのモジュールに作成されます。デバッグ ビルドを実行すると、このようなモジュールはユーザー コードと見なされます。最適化され、デバッグ シンボルがないライブラリ関数がユーザー コードとは見なされません。"マイ コードのみ" を有効にした場合、このようなライブラリ コードは、デバッグ対象外と見なされ、コード内でブレークポイントを設定しても実行を中断できません。[ブレークポイント] ウィンドウで確認すると、これらのブレークポイントには、無効なブレークポイントであることを示すアイコンが表示されます。

すべてのコードを参照したり、このブレークポイントを停止するには、[オプション] のダイアログ ボックスで"マイ コードのみ"デバッグを無効にできます。

3 つの属性も、デバッガーがどのコードをマイ コードと見なすかに影響します。DebuggerNonUserCodeAttribute は、適用先のコードはマイ コードではないことをデバッガーに通知します。DebuggerHiddenAttribute は、"マイ コードのみ" がオフになっていても、コードをデバッガーから見えないようにするための属性です。DebuggerStepThroughAttribute は、それが適用されているコードを (ステップ インではなく) ステップ スルーするよう、デバッガーに伝える属性です。

マイ コードのみ"を有効にした場合、[デバッグ][すべて中断] メニューのを選択し、表示される[マイ コードがない位置で実行を中断できます。その場合、コードは表示されません。また、[ステップ] コマンドを選択した場合は、My Code の次の行に制御が移動します。

Visual Basic の Stop ステートメントなど、プログラム上の中断ステートメントについては異なる処理が適用されます。デバッガーは、該当するステートメントが見つかると、"マイ コードのみ" が有効であるかどうかに関係なく常に実行を中断します。この場合、非ユーザー コードは表示されますが、そこでステップ実行すると、非ユーザー コードを通過して次の My Code 行に制御が移動します。

[!メモ]

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

y740d9d3.collapse_all(ja-jp,VS.110).gifシステム コールにステップ インします。

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

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

Microsoft シンボル ファイルにアクセスするには、シンボル (.pdb) ファイル、ソース ファイル、およびバイナリ ファイルの検索 のトピックの Windows および他の Microsoft シンボルを使って を参照してください。

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

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

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

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

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

y740d9d3.collapse_all(ja-jp,VS.110).gifマネージ コード内のプロパティおよび演算子にステップ インします。

デバッガーがマネージ コード内のプロパティおよび演算子は既定で説明します。ほとんどの場合、これはより詳細なデバッグ機能を提供します。プロパティまたは演算子にステップを有効にするには、[デバッグ][オプションと設定] を選択します。[デバッグ] で、[全般] のページは、[プロパティおよび演算子をステップ オーバーする (マネージのみ)] のチェック ボックスをオフにします

このトピックの内容

デバッグを停止します

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

Visual Studio からデバッグを停止します

[デバッグ][デバッグの停止] を選択します。

[デバッグの停止] は、プログラムを Visual Studio から起動、デバッグ プロセスを終了します。プロセスに Visual Studio からアプリケーションを起動せずにアタッチする場合は、プロセスの実行は続行されます。

デバッグを停止し、再起動します。

現在のデバッグ セッションが停止し、デバッガーのスタートアップ プロジェクトを再起動するには [デバッグ][再起動] を選択します。

デバッグ アプリケーションを閉じます。

デバッグ アプリケーションを終了すると、デバッグ自動的に停止します。