チュートリアル: Visual Studio を使用した C# のデバッグについて理解する

適用対象:yesVisual Studio noVisual Studio for Mac noVisual Studio Code

この記事では、ステップ バイ ステップのチュートリアルで Visual Studio デバッガーの機能を紹介します。 デバッガー機能の概要を確認したい場合は、「デバッガーでのはじめに」を参照してください。 "ご自分のアプリをデバッグする" 場合、通常、それはデバッガーをアタッチした状態でご自分のアプリケーションを実行することを意味します。 これを行う場合、デバッガーには、ご自分のコードが実行されている間にそのコードによって何が行われているのかを確認するためのさまざまな方法が用意されています。 ご自分のコードをステップ実行して変数内に格納されている値を確認したり、変数に対してウォッチ式を設定して値が変わるタイミングを確認したり、コードの実行パスを調べたり、コードの分岐が実行されているかどうかを確認したりできます。 コードのデバッグを試みるのが今回初めてである場合は、この記事を先に進む前に超初心者向けのデバッグ方法に関するページを参照することをお勧めします。

デモ アプリは C# ですが、ほとんどの機能は C++、Visual Basic、F#、Python、JavaScript、および Visual Studio でサポートされているその他の言語にも適用されます (F# ではエディット コンティニュはサポートされていません。F# および JavaScript は、[自動変数] ウィンドウをサポートしていません)。 スクリーン ショットは C# になっています。

このチュートリアルでは、次の作業を行います。

  • デバッガーを起動して、ブレークポイントにヒットします。
  • デバッガー内でコードをステップ実行するコマンドについて学習します。
  • データ ヒントおよびデバッガー ウィンドウ内で変数を確認します。
  • 呼び出し履歴を調べる

必須コンポーネント

Visual Studio 2022 および .NET デスクトップ開発ワークロードをインストールしている必要があります。

Visual Studio 2019 をインストールし、 .NET Core クロスプラットフォームの開発ワークロードを用意しておく必要があります。

Visual Studio をまだインストールしていない場合は、Visual Studio のダウンロード ページに移動し、無料試用版をインストールしてください。

Visual Studio は既にあり、ワークロードだけをインストールする必要がある場合は、 [ツール]>[ツールと機能を取得] に移動すると、Visual Studio インストーラーが開きます。 Visual Studio インストーラーが起動します。 **[.NET Core クロスプラットフォームの開発]** ワークロードを選択し、 **[変更]** を選択します。

既に Visual Studio があり、 .NET デスクトップ開発ワークロードがインストールされていない場合は、 [ツール]>[ツールと機能を取得] に移動して、Visual Studio インストーラーを起動します。 Visual Studio インストーラーで、 [.NET デスクトップ開発] ワークロード選択し、 [変更] を選択します。

プロジェクトを作成する

まず、.NET Core コンソール プロジェクトを作成します。 このプロジェクトの種類には、必要となるすべてのテンプレート ファイルが付属していますので、何も追加する必要はありません。

  1. Visual Studio を開きます。

    スタート ウィンドウが開いていない場合は、 [ファイル]>[スタート ウィンドウ] を選択します。

  2. スタート ウィンドウで、 [新しいプロジェクトの作成] を選択します。

  3. [新しいプロジェクトの作成] ウィンドウで、検索ボックスに「コンソール」と入力またはタイプします。 次に、言語のリストから [C#] を選択して、プラットフォームのリストから [Windows] を選択します。

    言語およびプラットフォームのフィルターを適用してから、.NET Core 用の [コンソール アプリケーション] テンプレートを選択して、 [次へ] を選択します。

    コンソール アプリ用 C# テンプレートのスクリーンショット。

    注意

    [コンソール アプリ] テンプレートが表示されない場合は、 [新しいプロジェクトの作成] ウィンドウからそれをインストールすることができます。 [お探しの情報が見つかりませんでしたか?] メッセージで、 [さらにツールと機能をインストールする] リンクを選択します。 次に、Visual Studio インストーラーで、 [.NET Core クロスプラットフォームの開発] ワークロードを選択します。

  4. **[新しいプロジェクトの構成]** ウィンドウの **[プロジェクト名]** ボックスに「*GetStartedDebugging*」と入力します。 その後、 [次へ] を選択します。

  5. 推奨されるターゲット フレームワーク ([.NET Core 3.1 (長期的なサポート)]) または [.NET 5.0 (現在)] を選択し、 [作成] を選択します。

    Visual Studio によってその新しいプロジェクトが開かれます。

  1. Visual Studio を開きます。 スタート ウィンドウが開いていない場合は、[ファイル]>[スタート ウィンドウ] を選択します。

  2. スタート ウィンドウで、 [新しいプロジェクトの作成] を選択します。

  3. [新しいプロジェクトの作成] ウィンドウで、検索ボックスに「コンソール」と入力またはタイプします。 次に、言語のリストから [C#] を選択して、プラットフォームのリストから [Windows] を選択します。

    言語およびプラットフォームのフィルターを適用してから、 [コンソール アプリケーション] テンプレートを選択して、 [次へ] を選択します。

    Visual Studio 2022 の [新しいプロジェクトの作成] ウィンドウの [コンソール アプリケーション] テンプレートのスクリーンショット。

    注意

    [コンソール アプリケーション] テンプレートが表示されない場合は、 [新しいプロジェクトの作成] ウィンドウからインストールできます。 **[お探しの情報が見つかりませんでしたか?]** メッセージで、 **[さらにツールと機能をインストールする]** リンクを選択します。 次に、Visual Studio インストーラーで、 [.NET デスクトップ開発] ワークロードを選択します。

  4. **[新しいプロジェクトの構成]** ウィンドウの **[プロジェクト名]** ボックスに「*GetStartedDebugging*」と入力します。 その後、 [次へ] を選択します。

  5. [追加情報] ウィンドウの [フレームワーク] ドロップダウン メニューで [.NET 6.0 (長期的なサポート)] が選択されていることを確認し、 [作成] を選択します。

    Visual Studio によってその新しいプロジェクトが開かれます。

アプリケーションを作成する

Program.cs で、既定のすべてのコードを次のコードに置き換えます。

using System;

class ArrayExample
{
    static void Main()
    {
        char[] letters = { 'f', 'r', 'e', 'd', ' ', 's', 'm', 'i', 't', 'h'};
        string name = "";
        int[] a = new int[10];
        for (int i = 0; i < letters.Length; i++)
        {
            name += letters[i];
            a[i] = i + 1;
            SendMessage(name, a[i]);
        }
        Console.ReadKey();
    }

    static void SendMessage(string name, int msg)
    {
        Console.WriteLine("Hello, " + name + "! Count to " + msg);
    }
}

デバッガーを起動する

  1. F5 キー ([デバッグ] > [デバッグの開始])、または [デバッグ] ツール バーの [デバッグの開始] ボタン [デバッグの開始] ボタンの画像。 を押します。

    **F5** キーを押すと、デバッガーがアプリ プロセスにアタッチされた状態でアプリが起動されますが、現時点で、コードを調べるために特別なことは何も行っていません。 そのため、アプリが読み込まれるだけで、このコンソール出力が表示されます。

    Hello, f! Count to 1
    Hello, fr! Count to 2
    Hello, fre! Count to 3
    Hello, fred! Count to 4
    Hello, fred ! Count to 5
    Hello, fred s! Count to 6
    Hello, fred sm! Count to 7
    Hello, fred smi! Count to 8
    Hello, fred smit! Count to 9
    Hello, fred smith! Count to 10
    

    このチュートリアルでは、デバッガーを使用してこのアプリを詳しく見て行くと共に、デバッガーの機能についても説明します。

  2. 赤色の停止 [デバッグの停止] ボタンの画像 ボタン (Shift + F5 キー) を押して、デバッガーを停止します。

  3. コンソール ウィンドウで、任意のキーを押してコンソール ウィンドウを閉じます。

ここでは主にキーボード ショートカットを使用します。これは、デバッガーのコマンドを素早く実行するためです。 ツールバーやメニュー コマンドなど、同等のコマンドも記載されています。

  1. デバッガーを起動するには、F5 キーを押すか、標準ツール バーの [デバッグ ターゲット] ボタンを選択するか、[デバッグ] ツール バーの [デバッグの開始] ボタンを選択するか、メニュー バーから [デバッグ]>[デバッグの開始] を選択します。

    Visual Studio 2022 の標準ツール バーの [デバッグ ターゲット] ボタンのスクリーンショット。

    F5 によりアプリが起動され、デバッガーがアプリのプロセスにアタッチされます。 コードを確認する特別なことは何もしていないので、アプリは最後まで実行され、コンソール出力が表示されます。

    Hello, f! Count to 1
    Hello, fr! Count to 2
    Hello, fre! Count to 3
    Hello, fred! Count to 4
    Hello, fred ! Count to 5
    Hello, fred s! Count to 6
    Hello, fred sm! Count to 7
    Hello, fred smi! Count to 8
    Hello, fred smit! Count to 9
    Hello, fred smith! Count to 10
    
  2. デバッガーを停止するには、Shift + F5 キーを押すか、[デバッグ] ツール バーの [デバッグの停止] ボタンを選択するか、メニュー バーの [デバッグ]>[デバッグの停止] を選択します。

    Visual Studio 2022 の [デバッグ] ツール バーの [デバッグの停止] ボタンのスクリーンショット。

  3. コンソール ウィンドウで、任意のキーを押してコンソール ウィンドウを閉じます。

ブレークポイントを設定し、デバッガーを開始する

  1. Main 関数の for ループ内で、ブレークポイントを設定します。そのためには、次のコード行の左余白をクリックします。

    name += letters[i];

    ブレークポイントを設定した場所に赤い円 ブレークポイントの画像。 が表示されます。

    ブレークポイントは、信頼できるデバッグの最も基本的で重要な機能の 1 つです。 ブレークポイントは、Visual Studio が実行コードを中断する場所を示します。これにより、変数の値またはメモリの動作を確認したり、コードの分岐が実行されるかどうかを確認したりすることができます。

  2. F5 キーを押すか、[デバッグの開始] ボタン [デバッグの開始] ボタンのスクリーンショット。を押します。すると、アプリが起動され、ブレークポイントを設定したコード行までデバッガーが実行されます。

    ブレークポイントを設定してそこにヒットする

    黄色の矢印はデバッガーが一時停止しているステートメントを表します。デバッガーの一時停止によってアプリの実行も同じポイントで中断されます (このステートメントはまだ実行されていません)。

    アプリがまだ実行されていない場合、**F5** キーを押すとデバッガーが起動し、最初のブレークポイントで停止します。 それ以外の場合、**F5** キーを押すと、アプリの実行が続行され、次のブレークポイントまで進みます。

    ブレークポイントは、詳細に調べたいコード行またはコード セクションがわかっている場合に便利な機能です。 条件付きブレークポイントなど、設定できるさまざまな種類のブレークポイントについては、ブレークポイントの使用に関するページを参照してください。

  1. Main 関数の for ループ内で、ブレークポイントを設定します。そのためには、次のコード行の左余白をクリックします。

    name += letters[i];

    ブレークポイントを設定した場所に赤い円が表示されます。

    Visual Studio 2022 でのブレークポイントのスクリーンショット。

    ブレークポイントは、信頼性の高いデバッグに不可欠な機能です。 ブレークポイントは、Visual Studio の実行コードを中断する場所に設定できます。これにより、変数の値またはメモリの動作を確認したり、コードの分岐が実行されるかどうかを確認したりすることができます。

  2. デバッグを開始するには、F5 キーを押すか、標準ツールバーの [デバッグ ターゲット] ボタンを選択するか、[デバッグ] ツールバーの [デバッグの開始] ボタンを選択するか、メニュー バーの [デバッグ]>[デバッグの開始] を選択します。 アプリが起動し、ブレークポイントを設定したコード行までデバッガーが実行されます。

    Visual Studio 2022 のコード エディターのブレークポイントを示すスクリーンショット。コードの実行がブレークポイントで一時停止しています。

    黄色の矢印は、デバッガーが一時停止したステートメントを示しています。 アプリの実行は同じポイントで一時停止し、ステートメントはまだ実行されていません。

    アプリが実行されていないときに F5 キーを押すと、デバッガーが起動し、最初のブレークポイントに到達するまでアプリが実行されます。 アプリがブレークポイントで一時停止している場合に F5 キーを押すと、次のブレークポイントに到達するまでアプリの実行が継続されます。

    ブレークポイントは、詳細に調べたいコードの行またはセクションがわかっている場合に便利な機能です。 条件付きブレークポイントなど、設定できるさまざまな種類のブレークポイントの詳細については、ブレークポイントの使用に関するページを参照してください。

ほとんどの場合、ここではキーボード ショートカットを使用します。それはデバッガーでご自分のアプリをすばやく実行するのに便利な方法だからです (コマンド メニューなどの対応するコマンドはかっこ内に示します)。

  1. `name += letters[i]` ステートメントで一時停止しているときに、`letters` 変数にカーソルを合わせます。その既定値、つまり、配列の最初の要素の値である `char[10]` が表示されます。

    変数を調べることができる機能は、デバッガーの機能の中でも最も便利な機能の 1 つに挙げられ、それを行うにはさまざまな方法を利用できます。 多くの場合、問題のデバッグを試みるときは、特定のタイミングで変数に期待する値がそのとおりに変数に格納されているかどうかの確認を試みます。

  2. letters 変数を展開してそのプロパティを表示します。これには変数が含むすべての要素が入っています。

    'name+= letters[I]' ステートメントで一時停止しているデバッガーのスクリーンショット。

  3. 次に、name 変数にカーソルを合わせると、その現在の値である空の文字列が表示されます。

  4. F10 キーを 2 回押して (または [デバッグ]>、[ステップ オーバー] の順に選択して) SendMessage メソッド呼び出しに進み、次にもう一度 F10 キーを押します。

    F10 キーを押すと、アプリ コード内の関数またはメソッドにステップ インすることなく、デバッガーが次のステートメントに進みます (コードはまだ実行されています)。 SendMessage メソッド呼び出しで F10 キーを押し、SendMessage 用の実装コードをスキップしました (現時点で関係ないと思われるため)。

  5. 数回、F10 キーを押して (または [デバッグ][ステップ オーバー] の順に選択して)、for ループを数回繰り返します。ブレークポイントで再び一時停止したら、name 変数にカーソルを合わせて毎回値を確認します。

    Visual Studio デバッガーのアニメーション スクリーンショット。F10 を押すと

    変数の値は、for ループが繰り返されるたびに変化し、表示される値は、f、次は fr、その次は fre という具合になります。 このシナリオでデバッガーのループを速く進めるため、代わりに **F5** キーを押し (または **[デバッグ]****[続行]** の順に選択し)、次のステートメントではなくブレークポイントに進むことができます。

    デバッグ時に、変数のプロパティ値に期待どおりの値が格納されているかどうかをすばやく確認したい場合がよくあります。データ ヒントはそれを行うのに適した方法です。

  6. Main メソッド内の for ループで一時停止している間に、SendMessage メソッド呼び出しで一時停止するまで F11 キーを押します (または [デバッグ]>[ステップ イン] の順に選択します)。

    このコード行に到達するはずです。

    SendMessage(name, a[i]);

  7. F11 キーをもう一度押して SendMessage メソッドにステップインします。

    黄色のポインターが SendMessage メソッドに進みます。

    SendMessage メソッドの実行ポインターのスクリーンショット。

    F11 キーは [ステップ イン] コマンドであり、アプリの実行が一度に 1 ステートメント進められます。 F11 キーは実行フローを最も詳しく確認することができる便利な方法です。 既定では、非ユーザー コードはデバッガーによってスキップされます (詳細については、[マイ コードのみ](../../debugger/just-my-code.md)に関するページを参照)。

    たとえば、SendMessage メソッドの確認を終了しました。そこで、このメソッドからは抜け出したいけれども、デバッガーには留まっていたいとします。 これを行うには、 [ステップ アウト] コマンドを使用します。

  8. Shift + F11 キーを押します (または [デバッグ] > [ステップ アウト] の順に選択します)。

    このコマンドを使用すると、アプリの実行が再開され (そしてデバッガーが前へ進められ)、現在のメソッドまたは関数から制御が戻るまで続けられます。

    SendMessage メソッド呼び出しで一時停止している、Main メソッド内の for ループに戻る必要があります。 ご利用のコード内を移動するさまざまな方法の詳細については、[デバッガーでのコード間の移動](../../debugger/navigating-through-code-with-the-debugger.md)に関するページを参照してください。

  1. name += letters[i] ステートメントで一時停止した状態で letters 変数にカーソルを合わせると、配列のサイズと要素の型 char[10] を示すデータ ヒントが表示されます。

    注意

    デバッガーの最も便利な機能の 1 つは、変数を検査する機能です。 問題をデバッグするときに、特定の時点で変数に想定する値が割り当てられているかどうかを確認することはよくあります。 データのヒントを表示することは、それを確認できる良い方法です。

  2. letters 変数を展開すると、すべての配列要素とその値が表示されます。

    Visual Studio 2022 のデバッガーのデータ ヒントのスクリーンショット。配列変数 'letters' の要素値が表示されています。

  3. name 変数にカーソルを合わせると、その現在の値である空の文字列が表示されます。

  4. デバッガーを次のステートメントに進めるには、F10 キーを押すか、デバッグ ツール バーの [ステップ オーバー] ボタンを選択するか、メニュー バーの [デバッグ]>[ステップ オーバー] を選択します。 F10 キーをさらに 2 回押すと、SendMessage メソッド呼び出しを通過します。

    F10 キーを押すと、関数またはメソッドがステップ インされずにデバッガーが進みますが、コードは実行されます。 このように、現時点では関心のない SendMessage メソッドのコードのデバッグをスキップしました。

  5. for のループを数回繰り返すには、F10 キーを繰り返し押します。 各ループの反復処理中に、ブレークポイントで一時停止し、name 変数にカーソルを合わせて、データ ヒントでその値を確認します。

    'name' 変数の文字列値が表示されている Visual Studio 2022 のデバッガーのデータ ヒントのスクリーンショット。

    変数の値は、`for` ループが繰り返されるたびに変化し、表示される値は、`f`、次は `fr`、その次は `fre` という具合になります。 デバッガーでループをより速く通過させるには、代わりに F5 キーを押します。これで、次のステートメントではなくブレークポイントまで進みます。

  6. Main メソッドの for ループで一時停止しているときに、SendMessage メソッド呼び出しに到達するまで F11 キーを押すか、[デバッグ] ツール バーの [ステップ イン] ボタンを選択するか、メニュー バーの [デバッグ]>[ステップ イン] を選択します。

    デバッガーは次のコード行で一時停止します。

    SendMessage(name, a[i]);

  7. SendMessage メソッドにステップ インするには、もう一度 F11 キーを押します。

    黄色のポインターが `SendMessage` メソッドに進みます。

    'SendMessage' メソッド内のデバッガーの実行ポインターを示すスクリーンショット。

    F11 キーは、コードの実行フローをより詳細に調べるのに役立ちます。 メソッド呼び出しからメソッドにステップ インするには、F11 キーを押します。 既定では、ユーザー以外のメソッドへのステップ インはデバッガーによってスキップされます。 非ユーザー コードのデバッグについては、マイ コードのみに関するページを参照してください。

    SendMessage メソッドのデバッグが完了したら、main メソッドの for ループに戻ることができます。

  8. SendMessage メソッドを終了するには、Shift + F11 キーを押すか、[デバッグ] ツール バーの [ステップ アウト] ボタンを選択するか、メニュー バーの [デバッグ]>[ステップ アウト] を選択します。

    [ステップ アウト] を使用すると、アプリの実行が再開され (そしてデバッガーが前へ進められ)、現在のメソッドまたは関数から制御が戻るまで続けられます。

    SendMessage メソッド呼び出しで一時停止した状態で、黄色のポインターが Main メソッドの for ループに表示されます。 ご利用のコード内を移動するさまざまな方法の詳細については、[デバッガーでのコード間の移動](../../debugger/navigating-through-code-with-the-debugger.md)に関するページを参照してください。

  1. F5 キーを押し、もう一度ブレークポイントまで進みます。

  2. コード エディターで、下にスクロールして SendMessage メソッド内の Console.WriteLine メソッドにカーソルを合わせ、それによって左側に緑色の [クリックで実行] ボタン [クリックで実行] ボタンの画像。が表示されるのを確認します。 ボタンのヒントには、[ここまで実行します] と表示されます。

    [クリックして実行] ボタンのスクリーンショット。

    注意

    [Run to Click](クリックで実行) ボタンは Visual Studio 2017 の新機能です。 (緑色の矢印ボタンが表示されない場合、この例では代わりに F11 キーを使用してデバッガーを適切な場所まで進めます。)

  3. [クリックして実行] ボタン[クリックして実行] ボタンの画像。をクリックします。

    デバッガーが Console.WriteLine メソッドに進みます。

    このボタンを使用することは、一時的なブレークポイントを設定することに似ています。 **[クリックで実行]** はアプリ コードの表示領域内をすばやく移動するのに便利です (開いている任意のファイル内でクリックすることができます)。

  1. F5 キーを押し、もう一度ブレークポイントまで進みます。

  2. コード エディター内で、SendMessage メソッド内の Console.WriteLine メソッド呼び出しにカーソルを合わせ、それによって左側に [クリックで実行] ボタンが表示されるのを確認します。 ボタンのヒントには、[ここまで実行します] と表示されます。

    Visual Studio 2022 の [クリックで実行] ボタンを示すスクリーンショット。

  3. [クリックで実行] ボタンを選択します。 または、Console.WriteLine ステートメントにカーソルを置き、Ctrl + F10 キーを押します。 または、Console.WriteLine メソッド呼び出しを右クリックし、コンテキスト メニューから [カーソル行の前まで実行] を選択します。

    デバッガーが Console.WriteLine メソッド呼び出しまで進みます。

    [クリックで実行] ボタンの使用は、一時的なブレークポイントの設定と似ており、開いているファイル内のアプリ コードの可視領域内をすばやく移動するのに便利です。

アプリを簡単に再起動する

デバッグ ツールバーにある [再起動][アプリの再起動] ボタンの画像。 ボタン (Ctrl + Shift + F5 キー) をクリックします。

[再起動] を押すと、アプリを停止してからデバッガーを再起動する場合と比較して時間の節約になります。 デバッガーは、コードを実行すると最初にヒットするブレークポイントで一時停止します。

デバッガーは、前に for ループ内に設定したブレークポイントで再び停止します。

デバッガーでアプリを最初から再実行するには、Ctrl + Shift + F5 キーを押すか、[デバッグ] ツール バーの [再起動] ボタンを選択するか、メニュー バーの [デバッグ]>[再起動] を選択します。

Visual Studio 2022 の [デバッグ] ツール バーの [再起動] ボタンのスクリーンショット。

[再起動] を選択すると、1 回の手順でデバッガーが停止され、再起動されます。 デバッガーが再起動すると、for ループ内に以前に設定したブレークポイントである最初のブレークポイントまで実行されてから、一時停止します。

[自動変数] ウィンドウと [ローカル] ウィンドウを使用して変数を確認する

  1. コード エディターの下部にある [自動変数] ウィンドウを見てください。

    ウィンドウが閉じている場合は、デバッガーが一時停止している間に、 [デバッグ]>[ウィンドウ]>[自動変数] の順に選択します。

    [自動変数] ウィンドウには、変数とその現在の値が表示されます。 [自動変数] ウィンドウには、現在の行または前の行で使用されるすべての変数が表示されます (言語固有の動作についてはドキュメントを参照してください)。

  2. 次に、 [自動変数] ウィンドウの隣にあるタブ内の [ローカル] ウィンドウを見てください。

  3. letters 変数を展開して、それに含まれている要素を表示します。

    Visual Studio の [ローカル] ウィンドウのスクリーンショット。

    **[ローカル]** ウィンドウを確認すれば、現在の[スコープ](https://www.wikipedia.org/wiki/Scope_(computer_science)) (現在の実行コンテキスト) に含まれている変数がわかります。

デバッグしている間、 [自動変数] ウィンドウと [ローカル] ウィンドウに変数の値が表示されます。 ウィンドウは、デバッグ セッション中にのみ使用できます。 [自動変数] ウィンドウには、デバッガーの現在の行とその前の行で使用されている変数が表示されます。 **[ローカル]** ウィンドウには、ローカル スコープ (通常は現在の関数またはメソッド) で定義されている変数が表示されます。

  1. デバッガーが一時停止している状態で、コード エディターの下部にある [自動変数] ウィンドウを確認します。

    [自動変数] ウィンドウが閉じている場合は、Ctrl + D、A キーを押すか、メニュー バーの [デバッグ]>[ウィンドウ]>[自動変数] を選択します。

  2. デバッガーを一時停止したまま、 [自動変数] ウィンドウの隣のタブで [ローカル] ウィンドウを確認します。

    [ローカル] ウィンドウが閉じている場合は、Ctrl + D、L キーを押すか、[デバッグ]>[ウィンドウ]>[ローカル] を選択します。

  3. [ローカル] ウィンドウで letters 変数を展開すると、その配列要素と値が表示されます。

    Visual Studio 2022 の [ローカル] ウィンドウのスクリーンショット。'letters' 配列変数が展開されています。

[自動変数] ウィンドウと [ローカル] ウィンドウの使用方法の詳細については、「[自動変数] と [ローカル] ウィンドウで変数を検査」を参照してください。

ウォッチ式を設定する

  1. メインのコード エディター ウィンドウで、`name` 変数を右クリックして、 **[ウォッチ式の追加]** を選択します。

    コード エディターの下部に **[ウォッチ]** ウィンドウが表示されます。 [ウォッチ] ウィンドウを使用することで、監視する変数 (または式) を指定できます。

    これで、`name` 変数に対してウォッチ式が設定されたので、デバッガー内を移動しながらその値の変化を確認することができます。 その他の変数ウィンドウとは異なり、 [ウォッチ] ウィンドウには監視対象の変数が常に表示されます (対象外のときは淡色表示となります)。

ウォッチ ウィンドウに追加することで、コードをステップ実行するときに監視する変数または式を指定できます。

  1. デバッガーが一時停止している状態で name 変数を右クリックし、 [ウォッチの追加] を選択します。

    既定でコード エディターの下部にウォッチ ウィンドウが表示されます。

  2. name 変数にウォッチを設定したので、コードをステップ実行し、for ループの反復ごとに name 変数の値が変化することを確認します。

    その他の変数ウィンドウとは異なり、ウォッチ ウィンドウには監視対象の変数が常に表示されます。ただし、対象外のときは淡色表示になります。

ウォッチ ウィンドウの詳細については、ウォッチ ウィンドウを使用した変数のウォッチに関するページを参照してください。

呼び出し履歴を調べる

  1. for ループ内で一時停止しているときに、 [呼び出し履歴] ウィンドウをクリックします。このウィンドウは既定では右下ペイン内に表示されます。

    ウィンドウが閉じている場合は、デバッガーが一時停止している間に、 [デバッグ]>[ウィンドウ]>[呼び出し履歴] の順に選択します。

  2. デバッガーが SendMessage メソッド内で一時停止するのを確認できるまで、F11 キーを数回押します。 [呼び出し履歴] ウィンドウを見てください。

    Visual Studio の [呼び出し履歴] ウィンドウのスクリーンショット。

    [呼び出し履歴] ウィンドウには、メソッドおよび関数が呼び出されている順番が表示されます。 先頭行には、現在の関数が表示されます (このアプリでは `SendMessage` メソッド)。 2 行目には、`SendMessage``Main` メソッドから呼び出されたことが表示され、後もこのような具合に表示されます。

    注意

    [呼び出し履歴] ウィンドウは、Eclipse のような一部の IDE におけるデバッグ パースペクティブに似ています。

    呼び出し履歴は、アプリの実行フローを調査して理解するのに優れた方法です。

    コード行をダブルクリックすることで、ソース コードに移動できます。また、それによって、デバッガーで検査されている現在のスコープを変更することもできます。 このアクションを行っても、デバッガーは前に進みません。

    [呼び出し履歴] ウィンドウから右クリック メニューを使用して他の操作を行うこともできます。 たとえば、指定した関数にブレークポイントを挿入したり、 **[カーソル行の前まで実行]** を使用してデバッガーを進めたり、ソース コードの調査を開始したりできます。 詳細については、[呼び出し履歴を調べる](../../debugger/how-to-use-the-call-stack-window.md)」を参照してください。

[呼び出し履歴] には、メソッドと関数が呼び出される順序が表示されるので、アプリの実行フローを理解するのに役立ちます。

  1. [呼び出し履歴] ウィンドウは、デバッガーが for ループで一時停止しているときに表示されます。既定では、コード エディターの右下のペインに表示されます。

    [呼び出し履歴] ウィンドウが閉じている場合は、Ctrl+D、C キーを押すか、メニュー バーの [デバッグ]>[ウィンドウ]>[呼び出し履歴] を選択します。

    [呼び出し履歴] ウィンドウには、現在の Main メソッドに黄色のポインターが表示されます。

  2. デバッガーが SendMessage メソッド内で一時停止するのを確認できるまで、F11 キーを数回押します。

    [呼び出し履歴] ウィンドウの一番上の行には現在の関数 (ここでは SendMessage メソッド) が表示されます。 2 行目には、SendMessage メソッドが Main メソッドから呼び出されたことが表示されます。

    Visual Studio 2022 の [呼び出し履歴] ウィンドウのスクリーンショット。

    注意

    [呼び出し履歴] ウィンドウは、Eclipse のような一部の IDE におけるデバッグ パースペクティブに似ています。

    [呼び出し履歴] ウィンドウでコード行をダブルクリックすることで、ソース コードに移動できます。また、それによって、デバッガーで検査されている現在のスコープは変更されます。 このアクションを行っても、デバッガーは前に進みません。

    **[呼び出し履歴]** ウィンドウから右クリック メニューを使用して他の操作を行うこともできます。 たとえば、指定した関数にブレークポイントを挿入したり、 [カーソル行の前まで実行] を使用してデバッガーを進めたり、ソース コードに移動したりすることができます。

呼び出し履歴の詳細については、呼び出し履歴の確認方法に関するページを参照してください。

実行フローを変更する

  1. **F11** キーを 2 回押して、`Console.WriteLine` メソッドを実行します。

  2. SendMessage メソッド呼び出し内でデバッガーが一時停止した状態で、マウスを使用して左側にある黄色の矢印 (実行ポインター) をつかみ、その黄色の矢印を 1 行上に移動して、Console.WriteLine に戻ります。

  3. **F11** キーを押します。

    デバッガーにより `Console.WriteLine` メソッドが返されます (これはコンソール ウィンドウの出力に表示されます)。

    実行フローを変更することにより、さまざまなコード実行パスをテストしたり、デバッガーを再起動することなくコードを再実行したりできます。

    警告

    多くの場合、この機能には注意する必要があり、ツールヒントに警告が表示されます。 他の警告が表示される場合もあります。 ポインターを移動しても、ご利用のアプリを以前のアプリ状態に戻すことはできません。

  4. **F5** キーを押してアプリの実行を続行します。

    これでこのチュートリアルは完了です。

デバッグ中に実行ポインターを動かしてアプリのフローを変えることができます。

  1. for ループの SendMessage メソッド呼び出しでデバッガーが一時停止している状態で、F11 キーを 3 回押して SendMessage メソッドにステップ インし、実行後に Console.WriteLine メソッドを通過します。

    これで、デバッガーは SendMessage メソッドの最後の閉じかっこの位置で一時停止した状態になります。

  2. マウスを使用して黄色の矢印または実行ポインター (左余白) をつかみ、ポインターを 1 行上にドラッグします。

    デバッガーは Console.WriteLine ステートメントに戻ります。

  3. F11 キーを押します。

    デバッガーによって Console.WriteLine メソッドが再実行されると、コンソール ウィンドウの出力に重複した行が表示されます。

  4. F5 キーを押してアプリの実行を続行します。

実行フローを変更することにより、さまざまなコード実行パスをテストしたり、デバッガーを再起動することなくコードを再実行したりできます。

警告

この機能の使用には注意が必要です。 実行ポインターのヒントに、意図しない結果が生じる可能性があるという警告が表示されます。 また、他の警告も表示されることがあります。 実行ポインターを移動させても、アプリケーションを以前の状態に戻すことはできません。

実行フローの変更については、ポインターを移動して実行フローを変更する方法に関するページを参照してください。

これでこのチュートリアルは完了です。

次の手順

このチュートリアルでは、デバッガーを起動する方法、コードをステップ実行する方法、変数を確認する方法について学習しました。 必要に応じて、デバッガー機能の概要と、詳細情報へのリンクを取得します。