Déboguer des applications ASP.NET en production sur des machines virtuelles Azure et des groupes de machines virtuelles identiques Azure à l’aide du Débogueur de capture instantanée

Le Débogueur de capture instantanée prend une capture instantanée de vos applications en production au moment de l’exécution du code qui vous intéresse. Pour indiquer au débogueur de prendre une capture instantanée, vous définissez des points d’ancrage et des points de journalisation dans votre code. Dans le débogueur, vous pouvez voir précisément à quel endroit le code ne s’est pas exécuté correctement, sans que cela impacte le trafic de votre application en production. Snapshot Debugger peut vous aider à résoudre beaucoup plus vite les problèmes rencontrés dans les environnements de production.

Les snappoints et les logpoints sont similaires aux points d’arrêt, mais contrairement à ceux-ci, les snappoints n’arrêtent pas l’application lorsqu’ils sont atteints. En règle générale, la capture d’un instantané sur un snappoint prend entre 10 et 20 millisecondes.

Ce didacticiel présente les procédures suivantes :

  • lancer le Débogueur de capture instantanée ;
  • Définir un snappoint et afficher un instantané
  • Définir un logpoint

Prérequis

  • Le débogueur de capture instantanée pour les machines virtuelles Azure et les groupes de machines virtuelles identiques Azure est disponible uniquement pour Visual Studio 2019 Enterprise ou version ultérieure avec la charge de travail de développement Azure. (Dans l’onglet Composants individuels, vous le trouverez sous Débogage et test>Débogueur de capture instantanée.)

    S’il n’est pas déjà installé, installez Visual Studio 2019 Enterprise.

  • La collection de capture instantanée est disponible pour les applications web Machines virtuelles Azure\Groupe de machines virtuelles identiques :

    • Applications ASP.NET exécutées sur .NET Framework version 4.6.1 ou ultérieure.
    • Applications ASP.NET Core exécutées sur .NET Core version 2.0 ou ultérieure sur Windows.

    Notes

    Visual Studio Enterprise s’exécutant sur Windows 32 bits ne sera pas en mesure d’afficher les captures instantanées.

Ouvrir votre projet et démarrer le Débogueur de capture instantanée

  1. Ouvrez le projet pour lequel vous souhaitez exécuter le débogage d’instantané.

    Important

    Pour déboguer des captures instantanées, vous devez ouvrir la même version du code source que celle publiée sur votre service Machines virtuelles Azure\Groupe de machines virtuelles identiques.

  2. Choisissez Déboguer > Attacher le débogueur de capture instantanée.... Sélectionnez la machine virtuelle Azure\Groupe de machines virtuelles identiques sur laquelle votre application web est déployée et un compte de stockage Azure, puis cliquez sur Attacher. Le débogueur de capture instantanée prend également en charge Azure Kubernetes Service et Azure App Service.

    Launch the snapshot debugger from the Debug menu

    Select Azure Resource

    Important

    La première fois que vous sélectionnez Joindre le Débogueur de capture instantanée pour votre machine virtuelle, IIS est redémarré automatiquement. La première fois que vous sélectionnez Attacher le débogueur de capture instantanée pour vos groupes de machines virtuelles identiques, vous devez mettre à niveau manuellement chaque instance des groupes de machines virtuelles identiques.

    Notes

    (Visual Studio 2019 version 16.2 et ultérieures) Le débogueur de capture instantanée permet la prise en charge cloud Azure. Assurez-vous que la ressource Azure et le compte de stockage Azure que vous sélectionnez proviennent du même cloud. Veuillez contacter votre administrateur Azure si vous avez des questions sur les configurations de conformité Azure dans votre entreprise.

    Les métadonnées pour les Modules ne seront pas initialement activées, accédez à l’application web et le bouton Démarrer la collecte deviendra actif. Visual Studio est maintenant en mode Débogage de capture instantanée.

    Snapshot debugging mode

    Note

    Pour VMSS (groupe de machines virtuelles identiques), l’utilisateur doit mettre à niveau manuellement les instances dans le groupe de machines virtuelles identiques après avoir attaché le Débogueur de capture instantanée pour la première fois.

    La fenêtre Modules vous montre quand tous les modules ont été chargés pour la Machine virtuelle Azure\Groupe de machines virtuelles identiques (choisissez Déboguer > Windows > Modules pour ouvrir cette fenêtre).

    Check the Modules window

Définir un snappoint

  1. Dans l’éditeur de code, cliquez sur la marge gauche à côté de la ligne de code qui vous intéresse pour définir un snappoint. Vérifiez que ce code pourra s’exécuter.

    Set a snappoint

  2. Cliquez sur Lancer la collecte pour activer le snappoint.

    Turn on the snappoint

    Astuce

    L’exécution pas à pas n’est pas possible à l’affichage d’une capture instantanée, mais vous pouvez placer plusieurs snappoints dans votre code pour suivre l’exécution sur différentes lignes de code. Si le code comporte plusieurs snappoints, le Débogueur de capture instantanée s’assure que les captures instantanées correspondantes proviennent de la même session d’utilisateur final, même si de nombreux utilisateurs accèdent à l’application.

Prendre un instantané

Une fois qu’un snappoint est défini, vous pouvez générer manuellement un instantané en accédant à la vue du navigateur de votre site web et en exécutant la ligne de code marquée ou attendez que vos utilisateurs en génèrent un avec leur utilisation du site.

Inspecter les données de capture instantanée

  1. Lorsque le snappoint est atteint, une capture instantanée apparaît dans la fenêtre Outils de diagnostic. Pour ouvrir cette fenêtre, choisissez Déboguer > Fenêtres > Afficher les Outils de diagnostic.

    Open a snappoint

  2. Double-cliquez sur le snappoint pour ouvrir la capture instantanée dans l’éditeur de code.

    Inspect snapshot data

    Dans cette vue, vous pouvez pointer sur les variables pour afficher les DataTips, utiliser les fenêtres Variables locales, Suivi, et Pile des appels et évaluer des expressions.

    Le site web proprement dit est toujours en ligne ; les utilisateurs finaux ne sont pas affectés. Par défaut, le snappoint ne prend qu’une capture instantanée : dès que c’est fait, il se désactive. Si vous souhaitez prendre une autre capture instantanée sur le snappoint, vous pouvez le réactiver en cliquant sur Mettre à jour la collecte.

Vous pouvez également ajouter d’autres snappoints à votre application et les activer avec le bouton Mettre à jour la collecte.

Vous avez besoin d’aide ? Voir les pages Résolution des problèmes et problèmes connus et FAQ du débogage de captures instantanées.

Définir un snappoint conditionnel

S’il est difficile de recréer un état particulier dans votre application, envisagez d’utiliser un snappoint conditionnel. Les snappoints conditionnels vous aident à contrôler quand prendre un instantané, par exemple lorsqu’une variable contient une valeur spécifique que vous souhaitez inspecter. Les conditions sont définies à l’aide d’expressions, de filtres ou d’un nombre d’accès.

Créer un snappoint conditionnel

  1. Cliquez avec le bouton droit sur une icône de snappoint (sphère) et choisissez Paramètres.

    Choose Settings

  2. Dans la fenêtre des paramètres du snappoint, tapez une expression.

    Type an expression

    Dans l’illustration précédente, la capture instantanée n’est prise pour le snappoint que si visitor.FirstName == "Dan".

Définir un logpoint

Nous avons vu comment prendre une capture instantanée lorsqu’un snappoint est atteint. Il est également possible de configurer un snappoint de sorte qu’il consigne un message (autrement dit, qu’il crée un logpoint). Il n’est pas nécessaire pour cela de redéployer l’application. Les logpoints sont exécutés virtuellement, sans impact ou ni effet secondaire sur l’application en cours d’exécution.

Créer un logpoint

  1. Cliquez avec le bouton droit sur une icône de snappoint (hexagone bleu) et choisissez Paramètres.

  2. Dans la fenêtre des paramètres du snappoint, sélectionnez Actions.

    Create a logpoint

  3. Dans le champ Message, entrez le nouveau message de journal à consigner. Vous pouvez également évaluer des variables dans votre message de journal en les plaçant entre accolades.

    Si Envoyer dans la fenêtre Sortie est sélectionné, le message s’affiche dans la fenêtre Outils de diagnostic lorsque le logpoint est atteint.

    Logpoint data in the Diagnostic Tools window

    Si Envoyer au journal des applications est sélectionné, le message s’affiche partout où apparaissent les messages de System.Diagnostics.Trace (ou ILogger dans .NET Core), par exemple App Insights, lorsque le logpoint est atteint.

Dans ce tutoriel, vous avez appris comment utiliser le Débogueur de capture instantanée pour les machines virtuelles Azure et les groupes de machines virtuelles identiques Azure. Peut-être souhaitez-vous en savoir plus sur cette fonctionnalité.