次の方法で共有


Visual Studio デバッガーで変数と戻り値を検査する

問題をデバッグしようとすると、多くの場合、変数が特定のアプリの状態にあると予想される値を格納しているかどうかを調べようとします。 デバッガーの最も便利な機能の一部は、変数を検査できる機能です。

この記事では、Visual Studio でデバッガーを使用して変数を検査し、戻り値を表示する方法について説明します。 デバッガーには、次のようなタスクを実行するための便利な方法がいくつか用意されています。

  • コード エディターでは、データ ヒントとインライン戻り値を表示できます
  • デバッガー ウィンドウ ([自動変数]、[ローカル]、[ウォッチ] ウィンドウ) では、変数の値を表示できます
  • ビジュアライザーでは、大きな文字列または複雑な .NET オブジェクトを表示できます

これらの機能は、デバッグ中にのみ使用できます。 デバッグ セッションを開始する方法については、「デバッグを 開始して中断モードに入る」を参照してください。

コードのデバッグを初めて試みた場合は、この記事を読む前に、 初心者向けのデバッグデバッグの手法とツール を読んでください。

コード エディターで変数を表示する

多くの場合、デバッグ時には、コード エディターでオブジェクトのプロパティ値をすばやく確認する方法が必要であり、データ ヒントが適切な方法です。

デバッガーで一時停止中に、マウスでオブジェクトの上にマウス ポインターを置くと、その値または既定のプロパティ値が表示されます。

データ ヒントを表示する を表示する

データ ヒントを表示する を表示する

変数にプロパティがある場合は、オブジェクトを展開してすべてのプロパティを表示できます。

データ ヒントの使用方法の詳細については、「データ ヒントでデータ値を表示する」を参照してください。

コード エディターでメソッド呼び出しのインライン戻り値を表示する

.NET および C++ コードでは、メソッド呼び出しをステップ オーバーまたはステップ アウトするときに戻り値を調べることができます。これは、戻り値がローカル変数に格納されていない場合に便利です。 メソッドは、パラメーターとして、または別のメソッドの戻り値として使用できます。

Visual Studio 2022 バージョン 17.12 以降では、[ 自動変数] ウィンドウだけでなく、メソッド呼び出しの戻り値をインラインで表示できます。

メソッド呼び出しの戻り値を示すスクリーンショット。

Copilot を有効にすると、戻り値のデータ ヒントに表示される [Copilot に質問する] ボタンを使用して、インラインの戻り値に関連する対象の支援を受けることもできます。

Copilot アイコンを使用したメソッド呼び出しの戻り値を示すスクリーンショット。

変数にウォッチを設定する

ウォッチ ウィンドウを使用して、監視する変数 (または式) を指定できます。

デバッグ中に、コード エディターでオブジェクトを右クリックし、[ウォッチの 追加] を選択します。 ウォッチ ウィンドウが開きます。

ウォッチ ウィンドウ

ウォッチ ウィンドウ

この例では、オブジェクトにウォッチ セットが設定されており、デバッガー内を移動すると、その値の変化を確認できます。 他の変数ウィンドウとは異なり、[ ウォッチ ] ウィンドウには、監視している変数が常に表示されます (スコープ外の場合は淡色表示されます)。

詳細については、ウォッチ ウィンドウとクイックウォッチ ウィンドウを使用してウォッチを設定する方法に関するページを参照してください。

AI のサポートを受ける

Copilot を使用している場合は、コード エディターまたは [自動変数] ウィンドウまたは [ローカル] ウィンドウで変数を確認しているときに、AI の支援を受けることができます。 デバッグ中に変数を右クリックし、[Copilot に質問する] ボタンの [Copilot に質問する] のスクリーンショットを使用します。 このシナリオでは、Copilot は質問のコンテキストを既に認識しているため、チャットで自分でコンテキストを提供する必要はありません。 詳細については、「Copilotを使用したデバッグ」を参照してください。

デバッガー ウィンドウで変数を検査する (自動変数とローカル)

[自動変数] ウィンドウと [ローカル] ウィンドウには、デバッグ中に変数の値が表示されます。 ウィンドウは、デバッグ セッション中にのみ使用できます。 [自動変数] ウィンドウには、デバッガーが一時停止されている現在のステートメントの周囲で使用される変数が表示されます。 ローカル ウィンドウには、ローカル スコープで定義されている変数が表示されます。これは通常、現在の関数またはメソッドです。

  • デバッグ中に [自動変数] ウィンドウを開くには、 [デバッグ]>[ウィンドウ]>[自動変数] を選択するか、Ctrl+Alt+V>A を押します。

    [自動変数] ウィンドウは C#、Visual Basic、C++、Python コードでは使用できますが、JavaScript または F# では使用できません。

  • [ローカル] ウィンドウを開くには、デバッグ中に [デバッグ>Windows>Locals] を選択するか、Alt+4 キーを押します。

展開可能な配列とオブジェクトは、[ 自動変数 ] ウィンドウと [ ローカル ] ウィンドウに表示されます。 変数名の左側にある矢印を選択してビューを展開し、フィールドとプロパティを表示します。 System.IO.FileStream ウィンドウの オブジェクトの例を次に示します。

ファイルが System.IO.FileStream 値に設定されている [ローカル] ウィンドウのスクリーンショット。

ファイルが System.IO.FileStream 値に設定されている [ローカル] ウィンドウのスクリーンショット。

[ ローカル] ウィンドウまたは [自動 変数] ウィンドウの赤い値は、前回の評価以降に値が変更されたことを意味します。 変更は、以前のデバッグ セッションから行った場合や、ウィンドウの値を変更したためです。

デバッガー ウィンドウの既定の数値形式は 10 進数です。 16 進数に変更するには、[ ローカル] ウィンドウまたは [自動変数 ] ウィンドウを右クリックし、[ 16 進数表示] を選択します。 この変更は、すべてのデバッガー ウィンドウに影響します。

[自動変数] ウィンドウまたは [ローカル] ウィンドウで変数の値を編集する

[自動変数] ウィンドウまたは [ローカル] ウィンドウでほとんどの変数の値を編集するには、値をダブルクリックして新しい値を入力します。

a + bなど、値の式を入力できます。 デバッガーは、最も有効な言語式を受け入れます。

ネイティブ C++ コードでは、変数名のコンテキストを修飾する必要がある場合があります。 詳細については、「 Context 演算子 (C++)」を参照してください。

注意事項

値と式を変更する前に、必ず結果を理解しておいてください。 考えられる問題は次のとおりです。

  • 一部の式を評価すると、変数の値が変更されたり、プログラムの状態に影響を与えたりする可能性があります。 たとえば、 var1 = ++var2 を評価すると、 var1var2の両方の値が変更されます。 これらの式は 副作用があると言われます。 副作用について注意していないと、予期しない結果が生じる可能性があります。

  • 浮動小数点値を編集すると、小数部分の 10 進数から 2 進への変換により、わずかな不正確さが発生する可能性があります。 一見無害な編集であっても、浮動小数点変数の一部のビットが変更される可能性があります。

[自動変数] ウィンドウまたは [ローカル] ウィンドウで検索する

各ウィンドウの上にある検索バーを使用して、Autos ウィンドウまたは Locals ウィンドウの [名前] 列、[値] 列、[種類] 列でキーワードを検索できます。 Enter キーを押すか、矢印のいずれかを選択して検索を実行します。 継続的な検索をキャンセルするには、検索バーの [x] アイコンを選択します。

見つかった一致の間を移動するには、左右の矢印 (それぞれ Shift + F3 と F3) を使用します。

ローカルウィンドウでの検索のスクリーンショット

ローカルウィンドウでの検索のスクリーンショット

検索の深さを調整するには、[オート] ウィンドウまたは [ローカル] ウィンドウの上部にある [ディープサーチ] ドロップダウンリストを使用して、入れ子になったオブジェクトを検索するレベルを選択します。

[自動変数] ウィンドウまたは [ローカル] ウィンドウでプロパティをピン留めする

この機能は、.NET Core 3.0 以降でサポートされています。

ピン留め可能なプロパティ ツールを使用して、[自動変数] および [ローカル] ウィンドウでオブジェクトをプロパティごとにすばやく調べることができます。 このツールを使用するには、プロパティにカーソルを合わせ、表示されるピン アイコンを選択するか、右クリックして、結果のコンテキスト メニューで [ メンバーをお気に入りにピン留め する] オプションを選択します。 これにより、そのプロパティがオブジェクトのプロパティ リストの上部にバブルアップされ、プロパティの名前と値が [値] 列に表示されます。 プロパティのピン留めを外すには、もう一度ピン アイコンを選択するか、コンテキスト メニューの [ メンバーをお気に入りとしてピン留め解除 ] オプションを選択します。

[ローカル] ウィンドウの [プロパティのピン留め] のスクリーンショット。

[自動変数] ウィンドウまたは [ローカル] ウィンドウでオブジェクトのプロパティ リストを表示するときに、プロパティ名を切り替えたり、ピン留めされていないプロパティを除外したりすることもできます。 [自動変数] ウィンドウまたは [ローカル] ウィンドウの上にあるツール バーのボタンを選択すると、各オプションにアクセスできます。

[お気に入りのプロパティのフィルター] のスクリーンショット。

プロパティ名の切り替えのスクリーンショット。

[自動変数] ウィンドウまたは [ローカル] ウィンドウのコンテキストを変更する

[デバッグの場所] ツール バーを使用すると、目的の関数、スレッド、またはプロセスを選択できます。これは、[自動変数] ウィンドウと [ローカル] ウィンドウのコンテキストを変更します。

[デバッグの場所] ツール バーを有効にするには、ツール バー領域の空の部分をクリックし、ドロップダウン リストから [デバッグの場所] を選択するか、[表示>ツール バー>デバッグの場所] を選択します。

ブレークポイントを設定し、デバッグを開始します。 ブレークポイントにヒットすると、実行が一時停止し、[ デバッグの場所 ] ツール バーに場所が表示されます。

[デバッグの場所] ツール バーのスクリーンショット。

[デバッグの場所] ツール バーのスクリーンショット。

自動ウィンドウの言語の違い (C#、C++、Visual Basic、Python)

[ 自動変数] ウィンドウには、異なるコード言語で異なる変数が表示されます。

  • C# と Visual Basic では、[ 自動変数 ] ウィンドウに現在の行または前の行で使用されている変数が表示されます。 たとえば、C# または Visual Basic コードでは、次の 4 つの変数を宣言します。

         public static void Main()
         {
            int a, b, c, d;
            a = 1;
            b = 2;
            c = 3;
            d = 4;
         }
    

    c = 3;行にブレークポイントを設定し、デバッガーを起動します。 実行が一時停止すると、[ 自動設定] ウィンドウが表示されます。

    [自動変数] ウィンドウのスクリーンショット。c の値は 0 に設定されています。

    [自動変数] ウィンドウのスクリーンショット。c の値は 0 に設定されています。

    cはまだ実行されていないため、c = 3の値は 0 です。

  • C++ では、[ 自動 変数] ウィンドウには、実行が一時停止されている現在の行の前に、少なくとも 3 行で使用されている変数が表示されます。 たとえば、C++ コードでは、次の 6 つの変数を宣言します。

         void main() {
             int a, b, c, d, e, f;
             a = 1;
             b = 2;
             c = 3;
             d = 4;
             e = 5;
             f = 6;
         }
    

    e = 5;行にブレークポイントを設定し、デバッガーを実行します。 実行が停止すると、[ 自動] ウィンドウが表示されます。

    値が 3 の int c を示す行が強調表示されている [自動変数] ウィンドウのスクリーンショット。

    値が 3 の int c を示す行が強調表示されている [自動変数] ウィンドウのスクリーンショット。

    eがまだ実行されていないため、変数e = 5は初期化されていません。

[自動制御] ウィンドウで戻り値を表示する

次の例では、この C# コードは 2 つの関数の戻り値を追加します。

static void Main(string[] args)
{
    int a, b, c, d;
    a = 1;
    b = 2;
    c = 3;
    d = 4;
    int x = sumVars(a, b) + subtractVars(c, d);
}

private static int sumVars(int i, int j)
{
    return i + j;
}

private static int subtractVars(int i, int j)
{
    return j - i;
}

sumVars()メソッド呼び出しとsubtractVars()メソッド呼び出しの戻り値を [自動] ウィンドウで確認するには:

  1. int x = sumVars(a, b) + subtractVars(c, d);行にブレークポイントを設定します。

  2. デバッグを開始し、ブレークポイントで実行が一時停止したら、[ ステップ オーバー] を選択するか 、F10 キーを押します。 [自動設定] ウィンドウに次の戻り値が表示されます。

    [自動変数] 戻り値 C# のスクリーンショット。

ビジュアライザーを開いて変数を検査する

Visual Studio でのデバッグ中は、データの検査を容易にする組み込みのビジュアライザーを使用して、大きな文字列や複雑なオブジェクトを表示できます。 例えば次が挙げられます。

  • 文字列ビジュアライザーには、データ ヒントまたはデバッガー ウィンドウに対して長すぎるテキスト、XML、HTML、および JSON 文字列が表示されます。 また、形式が正しくない文字列を識別するのにも役立ちます。 詳細については、「 文字列ビジュアライザーで文字列を表示する」を参照してください。
  • DataSet ビジュアライザーと IEnumerable ビジュアライザーは、表形式ビジュアライザー内の .NET コレクション オブジェクトを表示します。 詳細については、 Visual Studio) オブジェクトの表形式ビジュアライザーに関するページを参照してください。

ビジュアライザーは 、[自動変数 ] ウィンドウ、データ ヒント、およびその他のデバッガー ウィンドウに表示されます。

ビジュアライザーで XAML または WPF UI 要素を検査する必要がある場合は、デバッグ中に XAML プロパティを調べる や、WPF ツリー ビジュアライザーを使用する方法 を参照するをご覧ください。

ビジュアライザーを開くには、デバッグ中に一時停止する必要があります。 サポートされているビジュアライザー値を持つ変数にカーソルを合わせ、虫眼鏡アイコン VisualizerIcon を選択します。

文字列ビジュアライザーを開く を開く

文字列ビジュアライザーを開く を開く