Проверка предыдущих состояний приложения с помощью функции возврата на шаг назад IntelliTrace в Visual Studio (Visual Studio Enterprise)

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

Шаг назад IntelliTrace доступен начиная с Visual Studio Enterprise 2017 версии 15.5 и более поздних версий, и для него требуется юбилейное обновление Windows 11 или Windows 10. На данный момент эта функция поддерживается для отладки приложений ASP.NET, WinForms, WPF, управляемых консольных приложений, а также управляемых библиотек классов. Начиная с Visual Studio 2017 Enterprise версии 15.7, эта функция также поддерживается для ASP.NET Core и .NET Core. Начиная с Visual Studio 2017 Enterprise 15.9 (предварительная версия 2), эта функция также поддерживается для собственных приложений, предназначенных для Windows. Отладка приложений UWP в настоящее время не поддерживается.

При работе с этим руководством вы сделаете следующее:

  • Включение моментальных снимков и событий IntelliTrace
  • Навигация между событиями с использованием команд для перехода на шаг назад и вперед
  • Просмотр моментальных снимков событий

Включение режима событий и моментальных снимков IntelliTrace

  1. Откройте проект в Visual Studio Enterprise.

  2. Выберите Сервис>Параметры>IntelliTrace, а затем — События и моментальные снимки IntelliTrace.

    Начиная с Visual Studio 2017 Enterprise 15.9 (предварительная версия 2), этот параметр называется Моментальные снимки IntelliTrace (управляемый и машинный код).

    Enable IntelliTrace Events and Snapshots mode

  3. Чтобы настроить параметры просмотра моментальных снимков при исключениях, выберите IntelliTrace>Дополнительно в диалоговом окне Параметры.

    Эти параметры доступны, начиная с Visual Studio 2017 Enterprise версии 15.7.

    Configure behavior for snapshots on exceptions

    Если включены события и моментальные снимки, также по умолчанию включается создание моментальных снимков при исключениях. Чтобы отключить эту возможность, снимите флажок Сбор моментальных снимков для событий исключения. Если эта функция включена, для необработанных исключений будут создаваться моментальные снимки. Для обработанных исключений моментальные снимки принимаются только в том случае, если исключение создается и если это не повторная обработка ранее вызванного исключения. В раскрывающемся списке вы можете задать максимальное количество моментальных снимков, создаваемых при исключениях. Это ограничение применяется каждый раз, когда приложение переходит в режим приостановки выполнения (например, при попадании в точку останова для приложения).

    Примечание.

    Моментальные снимки создаются только для тех событий исключения, которые являются записями IntelliTrace. Для управляемого кода можно задать регистрируемые IntelliTrace события. Для этого необходимо выбрать Сервис>Параметры>События IntelliTrace.

  4. В проекте задайте одну или несколько точек останова и запустите отладку (нажмите клавишу F5) либо запустите отладку в пошаговом режиме (клавиша F10 или F11).

    IntelliTrace будет создавать моментальный снимок процесса приложения для каждого шага отладчика, события точки останова или необработанного события исключения. Эти события записываются на вкладке События в окне Средства диагностики наряду с другими событиями IntelliTrace. Чтобы открыть это окно, выберите Отладка>Окна>Отображение средств диагностики.

    Рядом с событиями, для которых доступны моментальные снимки, отображается значок камеры.

    Events tab with snapshots

    По соображениям производительности моментальные снимки не принимаются при быстром выполнении шагов. Если рядом с шагом не отображается значок камеры, попробуйте сделать временной интервал между шагами немного больше.

  1. Для перехода между событиями используйте кнопки На шаг назад (ALT+[) и На шаг вперед (Alt+]) в панели инструментов "Отладка".

    С помощью этих кнопок можно перейти к событиям, которые отображаются на вкладке События в окне Средства диагностики. При переходе на шаг назад или вперед к событию автоматически активируется отладка с ведением журнала для выбранного события.

    Step Backward and Forward buttons

    При переходе на шаг назад или вперед Visual Studio автоматически переходит в режим отладки с ведением журнала. В этом режиме контекст отладчика переключается на момент времени, когда было зарегистрировано выбранное событие. Visual Studio также перемещает указатель в соответствующую строку в окне исходного кода.

    В этом представлении вы можете проверить значения в окнах Стек вызовов, Локальные, Видимые и Контрольные значения. Кроме того, вы можете просматривать подсказки по данным, наводя указатель мыши на переменные, а также вычислять выражения в окне Интерпретация. Отображаемые данные поступают из моментального снимка процесса приложения, созданного на рассматриваемый момент времени.

    Например, если после попадания в точку останова вы выполнили шаг отладки (клавиша F10), при нажатии кнопки На шаг назад среда Visual Studio переключится в режим отладки с ведением журнала в строке кода, соответствующей точке останова.

    Activating historical mode on an event with a snapshot

  2. Чтобы вернуться к динамическому выполнению, нажмите кнопку "Продолжить" (F5) или щелкните ссылку "Вернуться к динамической отладке" на информационной панели.

  3. Вы также можете просмотреть моментальный снимок на вкладке "События ". Выберите событие с моментальным снимком и выберите " Активировать отладку журнала".

    Activate Historical Debugging on an event

    В отличие от команды Следующая инструкция при просмотре моментального снимка не осуществляется повторное выполнение кода. В этом случае вы получаете статическое представление состояния приложения на момент времени в прошлом.

    Overview of IntelliTrace step-back

    Подробнее о проверке переменных в Visual Studio см. в описании возможностей отладчика.

Вопросы и ответы

Чем функция возврата на шаг назад IntelliTrace отличается от режима "Только для событий IntelliTrace"?

В режиме "Только для событий IntelliTrace" вы не можете активировать отладку с ведением журнала для шагов и точек останова отладчика. Тем не менее IntelliTrace будет регистрировать данные в окнах Локальные и Видимые только в том случае, если эти окна открыты. При этом будут записываться только те данные, которые развернуты и находятся в представлении. В режиме только событий у вас часто нет полного представления переменных и сложных объектов. Кроме того, оценка выражений и просмотр данных в окне "Контрольные данные" не поддерживается.

В режиме событий и моментальных снимков IntelliTrace записывает моментальный снимок всего процесса приложения, включая составные объекты. В строке кода можно увидеть те же сведения, что и если бы вы были остановлены в точке останова (и это не имеет значения, если вы ранее расширили информацию). Кроме того, при просмотре моментальных снимков поддерживается вычисление выражений.  

Как эта функция влияет на производительность? 

Влияние на общую производительность пошаговой отладки зависит от приложения. Создание моментального снимка занимает примерно 30 мс. При создании моментального снимка процесс разветвляется, а ответвленная копия приостанавливается. При просмотре моментального снимка Visual Studio присоединяет ответвленную копию процесса. Для каждого моментального снимка Visual Studio копирует только таблицу страниц и присваивает страницам атрибуты копирования при записи. Если объекты в куче изменяются между шагами отладчика, с которыми связаны моментальные снимки, соответствующая таблица страниц копируется, в результате чего потеря памяти будет минимальной. Если Visual Studio обнаруживает, что недостаточно памяти для создания моментального снимка, он не принимает один.

Известные проблемы

  • Если вы используете события IntelliTrace и режим моментальных снимков в версиях Windows старше Windows 10 Fall Creators Update (RS3), а если целевой объект платформы отладки приложения имеет значение x86, IntelliTrace не принимает моментальные снимки.

    Решения.

    • Если вы находитесь в юбилейном обновлении Windows 10 (RS1), а версия выше 10.0.14393.2273, установите КБ4103720.
    • Если вы находитесь в Windows 10 Creators Update (RS2) и ваша версия выше 10.0.15063.1112, установите КБ4103722.
    • Установите Windows 11 или Windows 10 с обновлением Fall Creators Update (RS3) или выполните обновление до соответствующей версии.
    • Кроме того:
      1. Установите набор инструментов VC++ 2015.3 версии 140 для классического компонента (x86, x64) из установщика Visual Studio.

      2. Выполните сборку целевого приложения.

      3. В командной строке используйте editbin средство для задания Largeaddressaware флага целевого исполняемого файла. Например, после обновления пути можно использовать следующую команду: "C:\Program Files (x86)\Microsoft Visual Studio\Preview\Enterprise\VC\Tools\MSVC\14.12.25718\bin\Hostx86\x86\editbin.exe" /Largeaddressaware "C:\Path\To\Application\app.exe".

      4. Чтобы начать отладку, нажмите клавишу F5. Теперь моментальные снимки создаются для шагов и точек останова отладчика.

        Примечание.

        Флаг Largeaddressaware необходимо устанавливать каждый раз, когда выполняется повторное построение исполняемого файла после внесения изменений.

  • При создании моментального снимка процесса для приложения, которое использует сохраненный отображенный в память файл, процесс с моментальным снимком удерживает монопольную блокировку отображенного в память файла даже после того, как родительский процесс снимет блокировку. В результате другие процессы по-прежнему могут считывать отображенный в память файл, но не могут осуществлять запись в него.

    Решение:

    • По окончании сеанса отладки удалите все моментальные снимки.
  • При отладке приложения, процесс которого имеет большое количество уникальных областей памяти, таких как приложение, загружающее большое количество БИБЛИОТЕК DLL, может повлиять на производительность шагов с включенными моментальными снимками. В следующих версиях Windows эта ошибка будет устранена. Если вы столкнулись с этой проблемой, обратитесь к нам.stepback@microsoft.com

  • При сохранении файла с помощью отладки > сеанса IntelliTrace save IntelliTrace > в режиме событий и моментальных снимков другие данные, собранные из моментальных снимков, недоступны в itrace-файле. Для событий точки останова и шага отображается та же информация, как и в случае сохранения файла в режиме IntelliTrace только для событий.

Следующие шаги

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