Déboguer des exceptions dans les applications .NET à l’aide du Débogueur de capture instantanée
Lorsqu’il est activé, le Débogueur de capture instantanée collecte automatiquement un instantané de débogage du code source et des variables lorsqu’une exception se produit dans votre application .NET active. Le Débogueur de capture instantanée dans Application Insights :
- Surveille les journaux générés par le système de votre application web.
- Collecte les captures instantanées sur vos principales levées d’exception.
- Fournit les informations dont vous avez besoin pour diagnostiquer les problèmes en production.
En savoir plus sur les processus du débogueur et du chargeur de captures instantanées.
Applications et environnements pris en charge
Cette section répertorie les applications et les environnements pris en charge.
Applications
La collecte de captures instantanées est disponible pour :
- .NET Framework 4.6.2 et versions plus récentes.
- .NET 6.0 ou version ultérieure sur Windows.
Environnements
Les environnements suivants sont pris en charge :
- Azure App Service
- Azure Functions
- Azure Cloud Services exécutant la famille de systèmes d’exploitation 4 ou ultérieur
- Azure Service Fabric s’exécutant sur Windows Server 2012 R2 ou ultérieur
- Machines virtuelles Azure et Azure Virtual Machine Scale Sets exécutant Windows Server 2012 R2 ou ultérieur
- Machines locales physiques ou virtuelles exécutant Windows Server 2012 R2 ou version ultérieure, ou Windows 8.1 ou version ultérieure
Notes
Les applications clientes (par exemple, WPF, Windows Forms ou UWP) ne sont pas prises en charge.
Conditions préalables à l’utilisation du débogueur de capture instantanée
Packages et configurations
- Ajoutez le package NuGet Snapshot Collector dans votre application.
- Configurer des paramètres de collecte dans
ApplicationInsights.config
.
Autorisations
- Vérifiez que vous êtes ajouté au rôle de débogueur de capture instantanée Application Insights pour la capture instantanée Application Insights cible.
Fonctionnement du Débogueur de capture instantanée
Le Débogueur de capture instantanée est implémenté comme Processeur de données de télémétrie Application Insights. Quand votre application s’exécute, le processeur de données de télémétrie du Débogueur de capture instantanée est ajouté au pipeline de journaux générés par le système de votre application.
Important
Les instantanés peuvent contenir des données personnelles ou d’autres informations sensibles dans les valeurs des variables et des paramètres. Les données des instantanés sont stockées dans la même région que votre ressource Application Insights.
Processus de débogueur de capture instantanée
Le processus de débogueur de capture instantanée démarre et se termine par la méthode TrackException
. Une capture instantanée de processus est un clone suspendu du processus en cours d’exécution, de sorte que vos utilisateurs n’ont pas d’interruption. Dans un scénario classique :
Votre application lève le
TrackException
.Le débogueur de capture instantanée surveille les exceptions à mesure qu’elles sont levées en s’abonnant à l’événement
AppDomain.CurrentDomain.FirstChanceException
.Un compteur est incrémenté pour l’ID de problème.
- Lorsque le compteur atteint la valeur
ThresholdForSnapshotting
, l’ID de problème est ajouté à un plan de collecte.
Remarque
La valeur minimale
ThresholdForSnapshotting
par défaut est 1. Avec cette valeur, votre application doit déclencher la même exception à deux reprises avant qu’une capture instantanée soit créée.- Lorsque le compteur atteint la valeur
L’identifiant du problème de l’événement d’exception est calculé et comparé aux identifiants du problème dans le plan de collecte.
S’il existe une correspondance entre les ID de problèmes, une capture instantanée de rapport du processus en cours d’exécution est créée.
- Un identificateur unique est attribué à l’instantané et l’exception est marquée avec cet identificateur.
Remarque
Le taux de création de capture instantanée est limité par le paramètre
SnapshotsPerTenMinutesLimit
. Par défaut, la limite est d’une capture instantanée toutes les 10 minutes.Une fois que le gestionnaire
FirstChanceException
a retourné l’exception levée, celle-ci est traitée normalement.L’exception atteint à nouveau la méthode
TrackException
et est signalée à Application Insights, avec l’identifiant de la capture instantanée.
Remarque
Définissez IsEnabledInDeveloperMode
sur true
si vous voulez générer des captures instantanées lorsque vous déboguez dans Visual Studio.
Processus du chargeur de capture instantanée
Bien que le processus de débogueur de capture instantanée continue à s’exécuter et à traiter le trafic vers les utilisateurs avec peu d’interruption, la capture instantanée est remise au processus du chargeur de captures instantanées. Dans un scénario classique, le chargeur de capture instantanée :
Crée un minidump.
Charge le minidump dans Application Insights, ainsi que tous les fichiers de symboles (.pdb) pertinents.
Remarque
Au maximum 50 captures instantanées peuvent être chargées par jour.
Si vous avez activé le Débogueur de capture instantanée et que vous ne voyez pas d’instantanés, consultez le Guide de résolution des problèmes.
Mise à niveau du Débogueur de capture instantanée
Le Débogueur de capture instantanée s’auto-met à niveau via l’extension de site Application Insights intégrée et préinstallée.
L’ajout manuel d’une extension de site Application Insights pour garder à jour le Débogueur de capture instantanée est une méthode dépréciée.
Frais généraux
Le débogueur de capture instantanée (Snapshot Debugger) est conçu pour être utilisé dans des environnements de production. Les paramètres par défaut incluent des limites de débit afin de minimiser l’impact sur vos applications.
Toutefois, il est possible que le Débogueur de captures instantanées entraîne une légère surcharge du processeur, de la mémoire et des entrées/sorties, par exemple :
- Lorsqu’une exception est levée dans votre application
- Si le gestionnaire d’exception décide de créer une capture instantanée
- Lorsque
TrackException
est appelé
Le stockage des données capturées par le Debugger de captures instantanées n’entraîne aucun coût supplémentaire.
Limites
Cette section décrit les limitations du Débogueur de capture instantanée.
Conservation des données
Les captures instantanées de débogage sont stockées pendant 15 jours. La stratégie de conservation des données par défaut est définie par application. Si vous devez augmenter cette valeur, faites-en la demande en ouvrant une demande de support dans le portail Azure. Pour chaque instance Application Insights, un nombre maximal de 50 instantanés est autorisé par jour.
Publiez des symboles
Le Débogueur de capture instantanée nécessite des fichiers de symboles sur le serveur de production pour :
- Décoder des variables
- Fournir une expérience de débogage dans Visual Studio
Les versions 15.2 et ultérieures de Visual Studio 2017 publient par défaut les symboles des builds de mise en production lorsqu’elles publient dans App Service.
Dans les versions antérieures, vous devez ajouter la ligne suivante à votre fichier de profil de publication
.pubxml
afin que les symboles soient publiés en mode Mise en production :<ExcludeGeneratedDebugSymbol>False</ExcludeGeneratedDebugSymbol>
Pour Azure Compute et d’autres types, assurez-vous que les fichiers de symboles sont soit :
- Dans le même dossier de l’application principale
.dll
(généralementwwwroot/bin
), ou - Disponible sur le chemin d’accès actuel.
Pour plus d’informations sur les différentes options de symbole disponibles, consultez la documentation de Visual Studio. Pour optimiser les résultats, nous vous recommandons d’utiliser les options « Full », « Portable » ou « Embedded ».
Builds optimisées
Dans certains cas, des variables locales sont invisibles dans les builds de mise en production en raison d’optimisations appliquées par le compilateur JIT.
Toutefois, le Débogueur de capture instantanée dans App Service peut « désoptimiser » des méthodes de levée faisant partie de son plan de collecte.
Conseil
Installez l’extension de site Application Insights dans votre instance d’App Service pour obtenir un support de « désoptimisation ».
Étapes suivantes
Activez le Débogueur de capture instantanée Application Insights pour votre application :