Skip to content

Déboguer en ligne avec le débogueur de capture instantanée

Priya Siddha 24 nov. 2020 12:53:30

Alors que nous cherchons toujours à être plus agiles et réactifs pour gérer les problèmes éventuels dans nos applications, l’importance de pouvoir examiner et déboguer ces problèmes directement dans l’environnement de production est devenue plus évidente. En tant que plateforme hébergée par Azure utilisant Visual Studio, nous avons donc décidé d’essayer le Débogueur de capture instantanée.

Pourquoi utiliser cet outil?

Le Débogueur de capture instantanée est un outil qui permet aux développeurs .Net de mieux voir ce qui se passe dans leurs applications distantes.

Pourquoi choisir le Débogueur de capture instantanée :

  • Les développeurs peuvent voir des informations clés relatives aux exceptions levées dans une application, ce qui accélère le triage et permet éventuellement de résoudre le problème plus rapidement.
  • Les développeurs peuvent faire un zoom avant sur le code d’une application au moment exact où l’exception s’est produite, ce qui permet d’identifier les causes du problème sans nuire aux performances de l’application en cours d’exécution.
  • L’expérience de débogage d’une application Web dynamique ressemble beaucoup à l’expérience de débogage local.
  • Le soutien des applications en production est beaucoup plus facile.
  • Il est possible de déboguer des applications distribuées fonctionnant sur plusieurs serveurs.
  • Garantit un accès sécurisé aux données de production : les instantanés sont cryptés à la fois pendant le transfert et une fois stockés; de même, l’affichage des captures instantanées est protégé par le contrôle d’accès en fonction du rôle et fait l’objet d’une vérification. Le propriétaire de l’abonnement doit formellement autoriser les utilisateurs à examiner les captures instantanées en leur attribuant le rôle « Application Insights Snapshot Debugger ».

Comment utilisons-nous l’outil?

Le Débogueur de capture instantanée est accessible à partir de deux emplacements :

  1. Le portail Azure, où vous pouvez voir les variables locales dans votre pile d’appels (comme dans l’exemple ci-dessous). Dans Visual Studio Enterprise, vous pouvez accéder à cette fonctionnalité en téléchargeant une capture instantanée du portail Azure (l’extension est. diagsession) et en l’ouvrant avec Visual Studio.Picture1
  2. Vous pouvez également lier le débogueur Visual Studio aux applications s’exécutant dans Azure en mode de débogage par capture instantané dynamique. Cette fonction vous permet de collecter des captures instantanées à des lignes de code précises en utilisant le Débogueur, comme le montre la capture d’écran ci-dessous. Picture2

Quels sont les défis auxquels nous avons été confrontés?

Bien que la documentation semble assez simple, nous avons dû faire face à quelques défis lorsque nous avons essayé de faire fonctionner le Débogueur de capture instantanée :

  • Comme notre application est une application .Net Core autonome, le fait de n’activer que l’extension du site de débogage via le portail Azure n’a pas permis de collecte de captures instantanées. Nous avons dû ajouter le paquet NuGet et son code dans le fichier de démarrage, comme mentionné ici.
  • Notre code contient une classe d’intergiciel d’exception pour gérer les exceptions. Cet intergiciel a empêché le Débogeur de prendre des captures instantanées. Comme solution, nous avons dû relancer l’exception à partir du bloc de codes de capture de l’intergiciel. Il s’agit d’une simple ligne de code :

    Picture3

Une fois ces difficultés surmontées, nous avons été confrontés à un autre problème digne de mention, soit le fait qu’une des exceptions n’affichait jamais l’icône de capture instantanée dans le portail Azure. Le collecteur de captures instantanées obtenait une erreur lorsqu’il essayait de désoptimiser le code, ce qui l’empêchait de prendre la capture instantanée. Cela a finalement nécessité l’ajout d’un correctif dans la nouvelle version du paquet NuGet publiée par l’équipe Microsoft qui gérait l’exception « InvalidOperationException » lors de la désoptimisation des méthodes dynamiques (p.ex. Entity Framework).

Le débogage des captures instantanées dans Visual Studio n’a pas non plus fonctionné immédiatement, même après avoir effectué les étapes mentionnées dans la documentation. Le Débogeur de capture instantanée, pour les applications de bureau, analyse et se lie uniquement au fichier w3wp.exe et ne prend pas en charge les processus multiples. Comme notre processus était un processus enfant du fichier w3wp.exe, nous avons dû ajouter une extension privée à notre site Azure pour permettre au Débogeur de capture instantanée de se lier à notre processus enfant. Cette extension privée nous a été fournie par courriel par un membre de l’équipe Microsoft avec une note indiquant qu’elle fonctionnera tant que nos processus seront stables. Ils ont également confirmé qu’ils travaillent sur l’ajout de cette fonctionnalité à l’avenir.

Un dernier correctif que nous avons dû apporter a été de changer la configuration de la plateforme de notre site Azure à 64 bits afin que l’architecture du débogueur de notre site corresponde à celle du processus enfant.

Dans l’ensemble, nous n’avons rencontré que quelques obstacles pour mettre en place le Débogeur de capture instantanée et le faire fonctionner sur notre site en direct. Les efforts de configuration, de test et de coordination en collaboration avec l’équipe Microsoft ont été précieux et ont rendu notre expérience de débogage des applications dynamiques beaucoup plus facile!

Picture4

Bon débogage