Partager via


Déboguer les exceptions dans les applications .NET à l’aide du Snapshot Debugger

Lorsqu’il est activé, le Débogueur d'instantané collecte automatiquement un instantané de débogage des variables de votre code source lorsqu’une exception se déclenche dans votre application .NET active. Le Débogueur de capture instantanée dans Application Insights :

  • Surveille les logs du système générés par 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 Snapshot Debugger et Snapshot Uploader.

Applications et environnements pris en charge

Applications logicielles

La collecte de captures instantanées est disponible pour :

Environnements

Les environnements suivants sont pris en charge :

Remarque

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

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 jette 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 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 souhaitez générer des instantanés pendant le débogage 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.

Traitement

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.

Optimisations du code

Si des instantanés sont collectés à partir de votre application, il peut y avoir des informations sur les exceptions dans l'aperçu consolidé des optimisations du code.

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 avez besoin d’augmenter cette valeur, vous pouvez demander une augmentation en ouvrant un cas de support dans le Azure portal. 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

    Par défaut, Visual Studio 2017 à partir de la version 15.2 publie des symboles pour les builds de version lorsqu'il publie sur 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 services, 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 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, dans App Service, le débogueur de capture instantanée peut déoptimiser les méthodes d'exception incluses dans son plan de collecte.

    Conseil

    Installez l’extension de site Application Insights dans votre instance de App Service pour obtenir la prise en charge de la déoptimisation.

Étapes suivantes

Activez le Débogueur de capture instantanée Application Insights pour votre application :