Поделиться через


Проверка приложения с помощью исторической отладки IntelliTrace в Visual Studio (C#, Visual Basic, C++)

Историческая отладка позволяет переходить назад и вперед по выполнению приложения и проверять его состояние.

IntelliTrace можно использовать в выпуске Visual Studio Enterprise, но не в выпусках Professional или Community.

Начнем с простой программы, содержащей ошибку. В консольном приложении 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;
}

Предположим, что ожидаемое значение resultInt после вызова AddIterative() — 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(). Вы сразу же увидите ошибку в этом коде.

В этой процедуре приведен лишь краткий обзор всех действий, выполняемых в рамках отладки с ведением журнала.