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

При возникновении исключения, можно автоматически собирать отладочный моментальный снимок из работающего веб-приложения. Отладочный моментальный снимок отображает состояние исходного кода и переменных в момент порождения этого исключения. Snapshot Debugger в Azure Application Insights:

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

Просто добавьте пакет NuGet сборщика моментальных снимков в приложение и настройте параметры сбора в ApplicationInsights.config.

Моментальные снимки отображаются в разделе Исключения на панели Application Insights портал Azure.

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

Включение 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 тем пользователям, которые будут проверять моментальные снимки. Владельцы подписок могут назначить эту роль отдельным пользователям или группам для целевого ресурса Application Insights или его группы ресурсов или подписки.

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

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

Важно!

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

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

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

  • Нажмите кнопку Операции на вкладке Операции или
  • нажмите кнопку Исключения на вкладке Исключения.

Снимок экрана: страница сбоев на портале Azure.

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

Снимок экрана: кнопка

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

Снимок экрана: на портале Azure выделена кнопка

Моментальный снимок может содержать конфиденциальные сведения. По умолчанию моментальные снимки можно просматривать только в том случае, если вам назначена роль 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. При запуске приложения обработчик телеметрии Snapshot Collector добавляется в конвейер журналов, созданный системой для вашего приложения. Каждый раз, когда приложение вызывает TrackException, сборщик моментальных снимков вычисляет идентификатор проблемы из типа вызываемого исключения и метод создания исключения. При каждом вызове 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 дней. Политика хранения по умолчанию задается для каждого приложения отдельно. Если нужно изменить этот параметр, вы можете запросить изменения, открыв окно Службы Поддержки на портале Microsoft Azure. Для каждого экземпляра 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: