Отладка исключений в приложениях .NET с помощью отладчика моментальных снимков
При включении отладчик моментальных снимков автоматически собирает моментальный снимок отладки исходного кода и переменных при возникновении исключения в динамическом приложении .NET. Отладчик моментальных снимков в Application Insights:
- отслеживает системные журналы, созданные веб-приложением;
- собирает моментальные снимки для исключений верхнего уровня;
- предоставляет сведения, необходимые для диагностики проблем с рабочей средой.
Поддерживаемые приложения и среды
В этом разделе перечислены поддерживаемые приложения и среды.
Приложения
Коллекция моментальных снимков доступна для:
- платформа .NET Framework версии 4.6.2 и более поздних версий.
- .NET 6.0 или более поздней версии в Windows.
Среды
Поддерживаются следующие среды:
- Служба приложений Azure
- Функции Azure
- Облачные службы Azure под управлением ОС семейства 4 или более поздней версии
- Azure Service Fabric под управлением Windows Server 2012 R2 или более поздней версии
- Azure Виртуальные машины и Azure Масштабируемые наборы виртуальных машин под управлением Windows Server 2012 R2 или более поздней версии
- Локальные виртуальные машины или физические компьютеры под управлением Windows Server 2012 R2 или более поздней версии, а также Windows 8.1 или более поздней версии
Примечание.
Клиентские приложения (например, WPF, Windows Forms или UWP) не поддерживаются.
Предварительные требования для использования отладчика моментальных снимков
Пакеты и конфигурации
- Включите пакет NuGet сборщика моментальных снимков в приложение.
- Настройка параметров коллекции в
ApplicationInsights.config
.
Разрешения
- Убедитесь, что вы добавляете в роль отладчика моментальных снимков Application Insights для целевого моментального снимка Application Insights.
Как работает отладчик моментальных снимков
Отладчик моментальных снимков реализуется как обработчик телеметрии Application Insights. При запуске приложения обработчик телеметрии отладчика моментальных снимков добавляется в конвейер системных журналов приложения.
Внимание
Моментальные снимки могут содержать персональные данные или другую конфиденциальную информацию в значениях переменных и параметров. Данные моментальных снимков хранятся в том же регионе, что и ресурс Application Insights.
Процесс отладчика моментальных снимков
Процесс отладчика моментальных снимков начинается и заканчивается методом TrackException
. Моментальный снимок процесса — это приостановленный клон выполняемого процесса, чтобы пользователи не сталкивались с перерывами. В типичном сценарии:
Приложение создает исключение
TrackException
.Отладчик моментальных снимков отслеживает исключения по мере их создания, подписавшись на
AppDomain.CurrentDomain.FirstChanceException
событие.Счетчик увеличивается для идентификатора проблемы.
- Когда счетчик достигает
ThresholdForSnapshotting
значения, идентификатор проблемы добавляется в план сбора.
Примечание.
Минимальное
ThresholdForSnapshotting
значение по умолчанию — 1. С этим значением приложение должен активировать одно и то же исключение дважды перед созданием моментального снимка.- Когда счетчик достигает
Идентификатор проблемы события исключения вычисляется и сравнивается с идентификаторами проблем в плане сбора.
Если между идентификаторами проблем возникает совпадение, создается моментальный снимок выполняемого процесса.
- Моментальному снимку назначается уникальный идентификатор, и к исключению добавляется метка с этим идентификатором.
Примечание.
Частота создания моментальных снимков ограничивается параметром
SnapshotsPerTenMinutesLimit
. По умолчанию ограничение составляет один моментальный снимок каждые 10 минут.Когда возвращается дескриптор
FirstChanceException
, вызванное исключение обрабатывается в обычном режиме.Исключение снова достигает
TrackException
метода и сообщается Application Insights вместе с идентификатором моментального снимка.
Примечание.
Установите для IsEnabledInDeveloperMode
true
создания моментальных снимков во время отладки в Visual Studio.
Процесс отправки моментальных снимков
Хотя процесс отладчика моментальных снимков продолжает выполняться и обслуживать трафик для пользователей с небольшим прерыванием, моментальный снимок передается процессу отправки моментальных снимков. В типичном сценарии средство отправки моментальных снимков:
Создает мини-dump.
Отправляет мини-dump в Application Insights вместе с любыми соответствующими файлами символов (PDB).
Примечание.
Не более 50 моментальных снимков в день можно отправлять.
Если вы включили отладчик моментальных снимков, но не видите моментальные снимки, см . руководство по устранению неполадок.
Обновление отладчика моментальных снимков
Автоматическое обновление отладчика моментальных снимков с помощью встроенного предварительно установленного расширения сайта Application Insights.
Добавление расширения сайта Application Insights вручную для поддержания актуальности отладчика моментальных снимков устарело.
Накладные расходы
Отладчик моментальных снимков предназначен для использования в рабочих средах. Параметры по умолчанию включают ограничения скорости, чтобы свести к минимуму влияние на приложения.
Однако вы можете столкнуться с небольшими затратами на ЦП, память и ввод-вывод, связанные с отладчиком моментальных снимков, например:
- При возникновении исключения в приложении
- Если обработчик исключений решит создать моментальный снимок
- При
TrackException
вызове
Нет дополнительных затрат на хранение данных, захваченных отладчиком моментальных снимков.
См. примеры сценариев, в которых могут возникнуть затраты на отладчик моментальных снимков.
Ограничения
В этом разделе рассматриваются ограничения для отладчика моментальных снимков.
Хранение данных
Моментальные снимки отладки хранятся в течение 15 дней. Политика хранения по умолчанию задается для каждого приложения отдельно. Если нужно изменить этот параметр, вы можете запросить изменения, открыв окно Службы Поддержки на портале Microsoft Azure. Для каждого экземпляра Application Insights разрешено максимум 50 моментальных снимков в день.
Публикация символов
Отладчик моментальных снимков требует файлов символов на рабочем сервере:
- Декодирование переменных
- Предоставление возможности отладки в Visual Studio
По умолчанию Visual Studio 2017 версии 15.2+ публикует символы для сборок выпуска при публикации в Служба приложений.
В предыдущих версиях необходимо добавить следующую строку в файл профиля
.pubxml
публикации, чтобы символы были опубликованы в режиме выпуска:<ExcludeGeneratedDebugSymbol>False</ExcludeGeneratedDebugSymbol>
Для вычислений Azure и других типов убедитесь, что файлы символов являются следующими:
- В той же папке основного приложения
.dll
(как правило,wwwroot/bin
) или - Доступно по текущему пути.
Дополнительные сведения о различных доступных вариантах символов см. в документации по Visual Studio. Для получения наилучших результатов рекомендуется использовать полный, переносимый или внедренный.
Оптимизированные сборки
В некоторых случаях локальные переменные нельзя просматривать в сборках выпуска из-за оптимизации, примененной компилятором JIT.
Однако в Служба приложений отладчик моментальных снимков может деоптимизировать методы создания, которые являются частью плана сбора.
Совет
Установите расширение сайта Application Insights в экземпляре Служба приложений, чтобы получить поддержку deoptimization.
Следующие шаги
Включите отладчик моментальных снимков Application Insights для приложения: