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 :

Environnements

Les environnements suivants sont pris en charge :

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

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 :

  1. Votre application lève le TrackException.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. Une fois que le gestionnaire FirstChanceException a retourné l’exception levée, celle-ci est traitée normalement.

  7. 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 :

  1. Crée un minidump.

  2. 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.

Consultez des exemples de scénarios dans lesquels vous pouvez être confronté à la surcharge du Débogueur de capture instantanée.

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éralement wwwroot/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 :