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

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

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

Поддерживаемые приложения и среды

Приложения

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

Окружающая среда

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

Примечание.

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

Предварительные требования для использования отладчика моментальных снимков

Пакеты и конфигурации

Разрешения

Как работает отладчик моментальных снимков

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

Внимание

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

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

Процесс отладки с помощью моментальных снимков начинается и завершается методом TrackException. Снимок процесса — это приостановленный клон запущенного процесса. Ваши пользователи испытывают минимальные или вовсе отсутствующие прерывания. В типичном сценарии:

  1. Исключение создается в приложении и передается в Application Insights путем вызова TrackException метода.

  2. Отладчик моментальных снимков отслеживает исключения в момент их возникновения, подписываясь на событие AppDomain.CurrentDomain.FirstChanceException.

  3. Счетчик увеличивается для идентификатора задачи.

    Когда счетчик достигает ThresholdForSnapshotting значения, идентификатор проблемы добавляется в план сбора.

    Примечание.

    Минимальное ThresholdForSnapshotting значение по умолчанию — 1. С этим значением ваше приложение должно вызвать такое же исключение дважды перед созданием моментального снимка.

  4. Идентификатор проблемы события исключения вычисляется и сравнивается с идентификаторами проблем в плане сбора данных.

  5. Если между идентификаторами проблем происходит совпадение, создается снимок выполняемого процесса.

    Моментальному снимку назначается уникальный идентификатор, и к исключению добавляется метка с этим идентификатором.

    Примечание.

    Частота создания моментальных снимков ограничивается параметром SnapshotsPerTenMinutesLimit. По умолчанию ограничение составляет один моментальный снимок каждые 10 минут.

  6. После возвращения обработчика FirstChanceException, выброшенное исключение обрабатывается в обычном режиме.

  7. Исключение снова достигает метода TrackException и отправляется в Application Insights вместе с идентификатором моментального снимка.

Примечание.

Установите для параметра IsEnabledInDeveloperMode значение true, если вы хотите создать моментальные снимки во время отладки в Visual Studio.

Процесс загрузки снимков

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

  1. Создает минидамп.

  2. Отправляет мини-dump в Application Insights вместе с любыми соответствующими файлами символов (PDB).

Примечание.

Не более 50 моментальных снимков в день можно отправлять.

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

Обновление отладчика моментальных снимков

Автоматическое обновление отладчика моментальных снимков с помощью встроенного предустановленного расширения сайта Application Insights.

Добавление вручную расширения сайта Application Insights для поддержания в актуальном состоянии отладчика моментальных снимков больше не рекомендуется.

Накладные расходы

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

Однако вы можете столкнуться с небольшими затратами на ЦП, память и операции ввода-вывода, связанные с отладчиком снимков.

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

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

См. примеры сценариев, в которых вы можете столкнуться с нагрузкой отладчика моментальных снимков.

Оптимизация кода

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

Ограничения

В этом разделе рассматриваются ограничения для отладчика моментальных снимков.

  • Хранение данных

    Моментальные снимки отладки хранятся в течение 15 дней. Политика хранения по умолчанию задается для каждого приложения отдельно. Если необходимо увеличить это значение, можно запросить увеличение, открыв вариант поддержки в Azure portal. Для каждого экземпляра Application Insights разрешено максимум 50 моментальных снимков в день.

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

    Отладчик моментальных снимков требует файлов символов на рабочем сервере:

    • Декодирование переменных
    • Предоставление возможности отладки в Visual Studio

    По умолчанию Visual Studio 2017 версии 15.2 или более поздней публикует символы для сборок выпуска при публикации в Службе приложений.

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

        <ExcludeGeneratedDebugSymbol>False</ExcludeGeneratedDebugSymbol>
    

    Для Azure Compute и других типов убедитесь, что файлы символов находятся в одном из следующих состояний:

    • В той же папке основного приложения .dll (как правило, wwwroot/bin) или
    • Доступно по текущему пути.

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

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

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

    Однако в App Service отладчик моментальных снимков может деоптимизировать методы создания, которые являются частью плана сбора.

    Совет

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

Включите отладчик моментальных снимков Application Insights для приложения: