Visual Studio デバッガーは、コード内を移動してアプリの状態を調べ、実行フロー ( コード ステップ実行とも呼ばれます) を表示するのに役立ちます。 キーボード ショートカット、デバッグ コマンド、ブレークポイント、その他の機能を使用して、調べるコードをすばやく取得できます。 デバッガーのナビゲーション コマンドとショートカットについて理解を深めることで、アプリの問題をより迅速かつ簡単に見つけて解決できます。 コード ナビゲーションとデバッグに関連する最も一般的なキーボード ショートカットの一覧については、「キーボード ショートカット」の 「デバッグ 」セクションを参照してください。
注
コードのデバッグを初めて使用する場合は、この記事を読む前に、 初心者向けのデバッグ と デバッグの手法とツール を読んでください。
デバッグを開始して中断モードに入る
一部のナビゲーション コマンドでは、アプリが起動し、デバッガーが自動的にアタッチされます。 アプリは、ナビゲーションを開始するために使用したコマンドに基づいて特定のコード行で一時停止し、 中断モード に入ります (つまり、アプリはデバッガーで一時停止されます)。
中断モードでは、関数、変数、およびオブジェクトがメモリ内に残っている間、アプリの実行が中断されます。 デバッガーが中断モードの場合は、コード内を移動できます。 ブレーク モードにすばやく入る方法は、非常に一般的な 2 つあります。
ブレークポイントを設定 し、アプリを起動します。
特定の場所または関数に対して実行します。
たとえば、Visual Studio のコード エディターでは、[ カーソルまで実行 ] コマンドを使用して、デバッガーがアタッチされた状態でアプリを起動し、中断モードに入ることができます。 その後、ステップ コマンドを使用してコード内を移動できます。
コード ステップ 実行コマンドを 使用してアプリを起動できますが、中断モードに入った後でより一般的に使用されます。
中断モード中にコード内を移動する
一部のナビゲーション コマンドは、中断モード (つまり、デバッガーで一時停止中) に使用されます。
コード ステップ 実行 コマンドは、中断モードで最も一般的に使用されます。
[ クリックして実行] などの一部のコマンドは、中断モードでのみ使用できます。
デバッグモードと中断モード
中断モードの場合は、さまざまなコマンドを使用してコード内を移動できます。 変数の値を調べて、違反やバグを探すことができます。 プロジェクトの種類によっては、中断モードのときにアプリを調整することもできます。
[モジュール] ウィンドウや [ウォッチ] ウィンドウなど、ほとんどのデバッガー ウィンドウは、デバッガーがアプリにアタッチされている場合にのみ使用できます。 [ローカル] ウィンドウでの変数値の表示やウォッチ ウィンドウでの式の評価など、一部のデバッガー機能は、デバッガーが一時停止されている場合 (つまり、中断モード) にのみ使用できます。
注
ソース ファイルまたはシンボル (.pdb) ファイルが読み込まれていないコードに分割すると、デバッガーには、ファイルの検索と読み込みに役立つ [ソース ファイルが見つかりません ] または [ シンボルが見つかりません ] ページが表示されます。 「シンボル (.pdb) ファイルとソース ファイルを指定する」を参照してください。 シンボル ファイルまたはソース ファイルを読み込めなかった場合でも、[ 逆アセンブル ] ウィンドウでアセンブリ命令をデバッグできます。
コードのステップ実行
コード ステップ実行 とは、デバッガーがアタッチされた状態で、アプリケーション コードを一度に 1 つのステートメントで実行することを指します。 デバッガー ステップ コマンドは、各ステートメントの効果を観察し、その実行フローの詳細を確認するのに役立ちます。
コードにステップ インする
デバッグ中に各ステートメントで停止するには、 Debug>Step Into を使用するか、 F11 キーを押します。
デバッガーは、物理行ではなくコード ステートメントをステップ実行します。 たとえば、 if
句は 1 行に記述できます。
ただし、この行にステップインすると、デバッガーは条件を 1 つのステップとして扱い、結果を別のステップとして扱います。 前の例では、条件は true です。
入れ子になった関数呼び出しでは、 ステップ イン は最も深く入れ子になった関数にステップ インします。 たとえば、などの呼び出しでFunc1(Func2())
を使用する場合、デバッガーは関数Func2
にステップ インします。
ヒント
コードの各行を実行するときに、変数の上にマウス ポインターを置いて値を表示したり、[ ローカル ] ウィンドウと [ウォッチ ] ウィンドウを使用して値の変化を確認したりできます。 関数にステップインしながら 、呼び出し履歴 を視覚的にトレースすることもできます。 (Visual Studio Enterprise の場合のみ、 デバッグ中に呼び出し履歴のマップ メソッドを参照してください)。
コードをステップ実行し、一部の関数をスキップする
デバッグ中は、関数を気にしない場合があります。 または、よくテストされたライブラリ コードのように、いくつかのコードが機能することを知っているかもしれません。 次のコマンドを使用して、コードのステップ実行時にコードをスキップできます。 関数は引き続き実行されますが、デバッガーはそれらをスキップします。
キーボード コマンド | [デバッグ] メニューのコマンド | 説明 |
---|---|---|
F10 | ステップオーバー | 現在の行に関数呼び出しが含まれている場合、 ステップ オーバー はコードを実行し、呼び出された関数が戻った後、コードの最初の行で実行を中断します。 |
+ F11 | ステップ アウトする | ステップ アウト はコードの実行を続行し、現在の関数が戻ったときに実行を中断します。 デバッガーは現在の関数をスキップします。 |
特定の場所または関数に対して実行する
検査するコードが正確にわかっている場合、またはデバッグを開始する場所がわかっている場合は、特定の場所または関数に直接実行することをお勧めします。
- ブレークポイントを再利用したいと思う可能性がある場合は、ブレークポイントを設定するのが最適です。
- その他のメソッドは便宜上、一時的なブレークポイントの設定に似ています。
コード内のブレークポイントに対して実行する
コードに単純なブレークポイントを設定するには、実行を中断するコード行の横にある左端の余白を選択します。 行を選択して、F9 キーを選択するか、 [デバッグ]>[ブレークポイントの設定/解除] を選択するか、右クリックして [ブレークポイント]>[ブレークポイントの挿入] を選択することもできます。 ブレークポイントは、コード行の横にある左余白に赤い点として表示されます。 デバッガーは、行が実行される直前に実行を中断します。
Visual Studio のブレークポイントは、条件付きブレークポイントやトレースポイントなどの豊富な機能セットを提供します。 詳細については、「 ブレークポイントの使用」を参照してください。
関数のブレークポイントまで実行する
指定した関数に到達するまでデバッガーを実行するように設定できます。 関数は名前で指定することも、呼び出し履歴から選択することもできます。
名前で関数ブレークポイントを指定するには:
[ デバッグ>新しいブレークポイント>関数ブレークポイントを選択します。
[ 新しい関数ブレークポイント ] ダイアログで、関数の名前を入力し、その言語を選択します。
[OK] を選択.
関数がオーバーロードされているか、複数の名前空間にある場合は、[ ブレークポイント ] ウィンドウで目的のものを選択できます。
呼び出し履歴から関数ブレークポイントを選択するには:
デバッグ中に、呼び出し履歴 ウィンドウを開くには、Debug>Windows>Call Stack を選択します。
[呼び出し履歴] ウィンドウで、関数を右クリックして [カーソルまで実行] を選択するか、Ctrl+F10 キーを押します。
呼び出し履歴を視覚的にトレースする方法については、「 デバッグ中に呼び出し履歴のメソッドをマップする」を参照してください。
カーソル位置まで実行する
カーソル位置まで実行するには、ソース コードまたは [呼び出し履歴] ウィンドウで、中断する行を選択し、右クリックして [カーソルまで実行] を選択するか、 Ctrl+F10 キーを押します。 [ カーソルまで実行] の選択は、 一時的なブレークポイントの設定と似ています。
カーソル位置まで強制実行
カーソルの場所まで実行するには、ソース コードまたは [呼び出し履歴] ウィンドウで、中断する行を選択し、右クリックして [ カーソルまで強制的に実行] を選択します。 [カーソルに強制的に実行] を選択すると、デバッガーがカーソルが配置されているコード行に到達するまで、ブレークポイントと初回例外がスキップされます。
クリックで実行
デバッガーが一時停止している間は、ソース コードまたは 逆アセンブル ウィンドウのステートメントの上にマウス ポインターを置いて、[ 実行をここに実行する ] 緑色の矢印を選択できます。 [クリックして実行] を使用することは、一時的なブレークポイントを設定するのと似ています。
[Force Run to Click]\(クリックした行の前まで強制実行\)
デバッガーが一時停止している間は、 Shift キーを押しながらソース コード内のステートメントにカーソルを合わせ、[ 実行をここに強制 する] (二重緑の矢印) を選択できます。 このオプションを選択すると、アプリケーションは Visual Studio デバッガーをアタッチし、カーソル位置で一時停止します。 実行中に見つかったブレークポイントと初回例外は一時的に無効になります。
注
Visual Studio 2022 以降では、Run to Click機能を利用できます。
コードを手動で中断する
実行中のアプリで次に使用可能なコード行に分割するには、 デバッグ>[すべて解除] を選択するか、 Ctrl+Alt+Break を選択します。
ユーザー以外のコードをデバッグする
既定では、デバッガーはマイ コードのみという設定を有効にして、アプリ コードのみをデバッグしようとします。 この機能がさまざまなプロジェクトの種類や言語でどのように機能するか、およびカスタマイズする方法の詳細については、「 マイ コードのみ」を参照してください。
デバッグ中にフレームワーク コード、サード パーティ製ライブラリ コード、またはシステム呼び出しを見るために、[マイ コードのみ] を無効にすることができます。 ツール (またはデバッグ) >Options>Debugging で、[マイ コードのみを有効にする] チェック ボックスをオフにします。 マイ コードのみを無効にすると、ユーザー以外のコードがデバッガー ウィンドウに表示され、デバッガーはユーザー以外のコードにステップ インできます。
注
デバイス プロジェクトでは、マイ コードだけがサポートされていません。
システム コードのデバッグ
Microsoft システム コードのデバッグ シンボルを読み込み、[マイ コードのみ] を無効にした場合は、他の呼び出しと同じようにシステム呼び出しにステップ インできます。
Visual Studio 2022 バージョン 17.7 以降では、デバッグ シンボルを手動で読み込む必要なく、外部コードにステップインするときに .NET コードを自動コンパイルできます。 詳細については、「のデバッグ中.NET アセンブリからソース コードを生成する」を参照してください。
Microsoft シンボルの読み込みの詳細については、「 シンボル ファイルの場所と読み込みオプションの構成」を参照してください。
特定のシステム コンポーネントのシンボルを読み込むには:
デバッグ中に、デバッグ>> を選択するか、Ctrl++キーを押して、Modules ウィンドウを開きます。
[ モジュール ] ウィンドウで、[シンボル の状態] 列にシンボルが読み込まれているモジュールを確認できます。 シンボルを読み込むモジュールを右クリックし、[シンボルの 読み込み] を選択します。
マネージド コードでプロパティと演算子にステップ インする
既定では、デバッガーはマネージド コードのプロパティと演算子をステップオーバーします。 ほとんどの場合、この動作により、デバッグ エクスペリエンスが向上します。 プロパティまたは演算子へのステップインを有効にするには、[ デバッグ>オプション] を選択します。 [ デバッグ>全般 ] ページで、[ プロパティと演算子のステップ オーバー (管理のみ)] チェック ボックスをオフにします。
ポインターを移動して実行フローを変更する
黄色の実行ポインターを移動することで、実行される次のステートメントを変更できます。 この機能は、中断モードの間に使用できます。
これは高度なデバッガー機能です。 詳細については、「 実行ポインターを移動する」を参照してください。