Visual Studio で IntelliTrace のデバッグ履歴を使用してアプリを検査します (C#、Visual Basic、C++)

アプリケーションの実行を前後に移動して、その状態を調査するには、デバッグ履歴を使用できます。

IntelliTrace は Visual Studio Enterprise Edition で使用できますが、Professional Edition または Community Edition では使用できません。

バグのあるシンプルなプログラムから始めましょう。 C# コンソール アプリケーションで次のコードを追加します。

static void Main(string[] args)
{
    int testInt = 0;
    int resultInt = AddIterative(testInt);
    Console.WriteLine(resultInt);
}
private static int AddIterative(int j)
{
    for (int i = 0; i < 20; i++)
    {
        j = AddInt(j);
    }
    return j;
}

private static int AddInt(int add)
{
    if (add == 10)
    {
        return add += 25;
    }
    return ++add;
}

AddIterative() を呼び出した後の resultInt の予想される値が 20 であるものとします (testInt を 20 回インクリメントした結果)。 また、AddInt() のバグを確認できないと想定します。 しかし、結果は実際には 44 です。 AddIterative() を 10 回ステップ実行しないでバグを見つけるにはどうすればよいでしょう。 デバッグ履歴を使うと、迅速かつ簡単にバグを発見できます。 方法は以下のとおりです。

  1. [ツール] > [オプション] > [IntelliTrace] > [全般] で、IntelliTrace が有効になっていることを確認し、[IntelliTrace イベントと呼び出し情報] を選択します。 このオプションを選択しないと、ナビゲーション余白が表示されません (後で説明します)。

  2. Console.WriteLine(resultInt); の行にブレークポイントを設定します。

  3. デバッグを開始します。 コードがブレークポイントまで実行されます。 [ローカル] ウィンドウで、resultInt の値が 44 であることを確認できます。

  4. [診断ツール] ウィンドウを開きます ([デバッグ] > [診断ツールの表示])。 コード ウィンドウは、次のようになります。

    Code window at the breakpoint

  5. ブレークポイントのすぐ上の左余白の横に双方向矢印が表示されます。 この領域はナビゲーション余白と呼ばれ、履歴デバッグに使用されます。 矢印をクリックします。

    コード ウィンドウでは、上記のコード行 (int resultInt = AddIterative(testInt);) がピンク色で表示されます。 ウィンドウの上には、現在デバッグ履歴中であることを示すメッセージが表示されます。

    コード ウィンドウは、次のようになります。

    code window in historical debugging mode

  6. ここで、AddIterative() メソッドにステップ インできます (F11 キー、またはナビゲーション余白の [ステップ イン] ボタン)。 次に進みます (F10 キー、またはナビゲーション余白の [次の呼び出しへ移動])。 ピンクの行が j = AddInt(j); 行に移ります。 ここで F10 キーを押しても、次のコード行には移動しません。 代わりに、次の関数呼び出しに移動します。 デバッグ履歴は呼び出しから呼び出しに移動し、関数呼び出しを含まないコード行はスキップされます。

  7. ここで、AddInt() メソッドにステップ インします。 このコードにバグがあることがすぐにわかります。

この手順では、デバッグ履歴でできることの表面的な部分のみを見ています。