在 Visual Studio 中使用 IntelliTrace 历史调试检查应用程序 (C#,Visual Basic、 c + +)

可以使用历史调试向后和向前移动来浏览应用程序的执行情况,以查看其执行状态。

Visual Studio 企业版中可使用 IntelliTrace,但专业版或社区版中无法使用。

让我们从有 Bug 的简单程序开始。 在 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() 中的 Bug)。 但结果实际上是 44。 如何在不单步执行 AddIterative() 10 次的情况下找到 Bug? 可以使用历史调试更快、更轻松地查找 bug。 操作方法如下:

  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() 方法。 应该立即看到此代码中的 Bug。

此过程仅粗略介绍使用历史调试可以完成的事项。