Отладочные моментальные снимки для исключений в приложениях .NET

При возникновении исключения, можно автоматически собирать отладочный моментальный снимок из работающего веб-приложения. Моментальный снимок отображает состояние исходного кода и переменных в момент порождения этого исключения. Snapshot Debugger в Azure Application Insights отслеживает телеметрию исключений, поступающую из вашего веб-приложения. Он собирает моментальные снимки для наиболее частых исключений, чтобы предоставить вам необходимые сведения для диагностики проблем в рабочей среде. Включите в ваше приложение пакет NuGet "Snapshot Collector" и при необходимости настройте параметры сбора в ApplicationInsights.config. Моментальные снимки отображаются в разделе Исключения на портале Application Insights.

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

Моментальные снимки отладки хранятся в течение 15 дней. Такая политика хранения задается для каждого приложения отдельно. Если нужно изменить этот параметр, вы можете запросить изменения, открыв окно Службы Поддержки на портале Microsoft Azure.

Включение Application Insights Snapshot Debugger для вашего приложения

Коллекция моментальных снимков доступна для:

  • .NET Framework и приложений ASP.NET выполняющихся с помощью .NET Framework LTS или более поздней версии;
  • приложений .NET Core и ASP.NET Core, использующих .NET Core 2.1 LTS в Windows;
  • приложений .NET LTS в Windows.

Мы не рекомендуем использовать версии .NET Core старше текущей LTS, так как они не поддерживаются.

Поддерживаются следующие среды:

Примечание

Клиентские приложения (например, WPF, Windows Forms или UWP) не поддерживаются.

Если вы включили Snapshot Debugger, но моментальных снимков нет, изучите наше руководство по устранению неполадок.

Предоставить разрешения

Доступ к моментальным снимкам защищен механизмом управления доступом на основе ролей Azure (Azure RBAC). Чтобы проверить моментальный снимок, вы сначала должны быть добавлены к нужной роли владельцем подписки.

Примечание

Владельцы и участники не получают эту роль автоматически. При необходимости просмотреть моментальные снимки нужно самостоятельно добавиться к роли.

Владельцам подписки следует назначить роль Application Insights Snapshot Debugger пользователям, которые будут проверять моментальные снимки. Владельцы подписок могут назначить эту роль отдельным пользователям или группам для целевого ресурса Application Insights или его группы ресурсов или подписки.

  1. Назначьте роль отладчика отладчику моментальных снимков Application Insights.

    Подробные инструкции см. в статье Назначение ролей Azure с помощью портала Microsoft Azure.

Важно!

Обратите внимание на то, что моментальные снимки могут содержать персональные данные или другие конфиденциальные сведения в значениях переменных и параметров. Данные моментального снимка хранятся в том же регионе, что и ресурс App Insights.

Просмотр моментальных снимков на портале

После возникновения исключения в вашем приложении и создания моментального снимка он должен стать доступен для просмотра. С момента исключения и до появления моментальный снимка к просмотру может пройти от 5 до 10 минут. Чтобы просмотреть моментальные снимки, откройте вкладку Операции на панели Ошибка и нажмите кнопку Операции, или нажмите кнопку Исключения на вкладке Исключения:

Страница

Выберите операцию или исключение на правой панели, чтобы открыть панель Подробные сведения о транзакциях, а затем выберите событие исключения. Если для данного исключения есть моментальный снимок, на правой панели появится кнопка Открыть моментальный снимок отладки с подробными сведениями об исключении.

Кнопка

В представлении "Debug Snapshot" (Отладочный моментальный снимок) можно увидеть стек вызовов и область переменных. При выборе кадров стека вызовов в области стека вызовов можно просматривать локальные переменные и параметры для этого вызова функции в области переменных.

Просмотр отладочного моментального снимка на портале

Моментальные снимки могут содержать конфиденциальные сведения и по умолчанию не отображаются. Для просмотра моментальных снимков вам должна быть назначена роль Application Insights Snapshot Debugger.

Просмотр моментальных снимков в Visual Studio 2017 Enterprise или более поздней версии

  1. Нажмите кнопку Скачать моментальный снимок, чтобы скачать файл .diagsession, который можно открыть в Visual Studio Enterprise.

  2. Чтобы открыть файл .diagsession, установите компонент Snapshot Debugger для Visual Studio. Snapshot Debugger — это необходимый компонент рабочей нагрузки ASP.NET в Visual Studio. Его можно выбрать в списке "Отдельный компонент" установщика Visual Studio. Если вы используете версию Visual Studio ниже Visual Studio 2017 версии 15.5, установите расширение с сайта Visual Studio Marketplace.

  3. После открытия файла моментального снимка в Visual Studio появится страница мини-дампа отладки. Щелкните Debug Managed Code (Отладить управляемый код), чтобы начать отладку моментального снимка. Откроется строка кода, на которой было порождено исключение, и вы сможете выполнить отладку текущего состояния процесса.

    Просмотр отладочного моментального снимка в Visual Studio

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

Как работают моментальные снимки

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

Сборщик Snapshot Collector также отслеживает исключения во время их создания, используя подписку на событие AppDomain.CurrentDomain.FirstChanceException. При возникновении этого события идентификатор проблемы исключения вычисляется и сравнивается с идентификаторами в плане сбора. Если обнаружено соответствие, создается моментальный снимок выполняющегося процесса. Моментальному снимку назначается уникальный идентификатор, и к исключению добавляется метка с этим идентификатором. После возврата ответа обработчиком FirstChanceException вызванное исключение обрабатывается в обычном режиме. Со временем исключение снова достигает метода TrackException. Тогда оно вместе с идентификатором моментального снимка сообщается в Application Insights.

Основной процесс продолжает выполняться и обслуживать трафик для пользователей с небольшим прерыванием. Тем временем моментальный снимок передается в процесс передачи моментальных снимков. Отправитель моментальных снимков создает минидамп и передает его в Application Insights вместе с соответствующими PDB-файлами символов.

Совет

  • Моментальный снимок процесса — это приостановленный клон выполняющегося процесса.
  • Создание моментального снимка занимает около 10–20 мс.
  • Значение по умолчанию для ThresholdForSnapshotting — 1. Это минимальное значение. Таким образом, прежде чем будет создан моментальный снимок, приложение должно вызвать то же исключение дважды.
  • Задайте для IsEnabledInDeveloperMode значение true, если требуется создавать моментальные снимки во время отладки в Visual Studio.
  • Частота создания моментальных снимков ограничивается параметром SnapshotsPerTenMinutesLimit. По умолчанию установлено ограничение — один моментальный снимок каждые десять минут.
  • Можно отправлять не более 50 моментальных снимков в день.

Ограничения

Срок хранения данных по умолчанию — 15 дней. Для каждого экземпляра Application Insights разрешено максимум 50 моментальных снимков в день.

Публикация символов

Отладчику моментальных снимков требуется наличие файлов символов на рабочем сервере для декодирования переменных и обеспечения возможности отладки в Visual Studio. Выпуск 15.2 (или выше) приложения Visual Studio 2017 по умолчанию публикует символы для сборок выпуска при публикации в службе приложений. В предыдущих версиях в профиль публикации .pubxml необходимо добавить приведенную ниже строку, чтобы символы публиковались в режиме выпуска.

    <ExcludeGeneratedDebugSymbol>False</ExcludeGeneratedDebugSymbol>

Для службы вычислений Azure и других типов служб файлы символов должны находиться в одной папке с DLL-файлом основного приложения (как правило, wwwroot/bin) или быть доступными по текущему пути.

Примечание

Дополнительные сведения о различных доступных вариантах символов см. в документации по Visual Studio. Для получения наилучших результатов рекомендуется использовать варианты Full, Portable или Embedded.

Оптимизированные сборки

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

Совет

Установите расширение сайта Application Insights в службе приложений для получения поддержки деоптимизации.

Дальнейшие действия

Включение Application Insights Snapshot Debugger для вашего приложения:

Дополнительно о Application Insights Snapshot Debugger: