BT

Automatiser ses tâches d'inspection avec CLR Memory Diagnostics

par Anand Narayanaswamy , traduit par Julien Delhomme le 25 juin 2013 |

Microsoft a récemment mis à disposition le composant Microsoft.Diagnostics.Runtime, qui fut un temps appelé ClrMD, via NuGet Package Manager. Celui-ci permet d'automatiser les tâches d'inspection et d'accéder à toujours plus d'informations pour le debugging. Il s'agit d'un ensemble d'APIs avancées permettant d'inspecter de façon programmatique le crash dump d'un programme .NET, à la façon des extensions de debugging SOS (SOS.dll), et apporte la possibilité de mettre en place l'automatisation d'analyses de crash de votre application ou autres nombreuses tâches de debugging courantes.

Pour travailler avec le composant ClrMD, vous devez créer une instance de la classe DataTarget, qui représente soit un crash dump, soit un processus .NET en cours. Ensuite, vous devez appeler la méthode TryGetDacLocation(), qui va tenter de localiser un DAC correspondant sur la machine. Si vous souhaitez inspecter un processus et que votre machine ne possède pas la CLR correspondante, vous pouvez aussi manuellement copier le DAC d'une autre machine, sur laquelle est installée la CLR correspondante, et fournir le chemin vers la DLL mscordacwks.dll à la méthode CreateRuntime().

Vous pouvez alors utiliser l'objet runtime pour examiner le contenu du tas, "le GC heap", à partir du résultat obtenu sous la forme suivante :

    23B1D30       36 System.Security.PermissionSet
    23B1D54       20 Microsoft.Win32.SafeHandles.SafePEFileHandle
    23B1D68       32 System.Security.Policy.PEFileEvidenceFactory
    23B1D88       40 System.Security.Policy.Evidence

Vous avez ici à disposition toutes les données nécessaires pour récupérer un ensemble de statistiques sur le tas, par exemple à partir d'une requête LINQ pour grouper le contenu du tas par type et trier par le volume total occupé par les objets. Le résultat ressemblera à ceci :

    564           11 System.Int32[]
    616           2 System.Globalization.CultureData
    680           18 System.String[]
    728           26 System.RuntimeType
    790           7 System.Char[]
    5,788         165 System.String
    17,252        6 System.Object[]

ClrMD offre également la possibilité de récupérer des informations générales concernant le GC heap, permet de parcourir la table d'handle de la CLR, les domaines d'applications portés par le processus et identifie les modules chargés dans ces domaines. Il peut énumérer les threads, récupérer pour chacun la pile d'appel ou la dernière exception levée ainsi que les objets racines du processus, ou encore récolter toute donnée sur les différents tas dont se sert le runtime de la CLR. L'intelliSense vous permettra d'explorer les différentes propriétés et fonctions disponibles incluses dans le package.

Pour finir en complétant les fonctionnalités citées ci-dessus, l'objet ClrThread possède une propriété CurrentException, qui contient, si elle n'est pas nulle, la stack trace complète, le message et le type de la dernière exception levée sur le thread.

Bonjour étranger!

Vous devez créer un compte InfoQ ou cliquez sur pour déposer des commentaires. Mais il y a bien d'autres avantages à s'enregistrer.

Tirez le meilleur d'InfoQ

Donnez-nous votre avis

Html autorisé: a,b,br,blockquote,i,li,pre,u,ul,p

M'envoyer un email pour toute réponse à l'un de mes messages dans ce sujet
Commentaires de la Communauté

Html autorisé: a,b,br,blockquote,i,li,pre,u,ul,p

M'envoyer un email pour toute réponse à l'un de mes messages dans ce sujet

Html autorisé: a,b,br,blockquote,i,li,pre,u,ul,p

M'envoyer un email pour toute réponse à l'un de mes messages dans ce sujet

Discuter

Contenu Éducatif

Rien ne serait possible sans le soutien et la confiance de nos Sponsors Fondateurs:

AppDynamics   CloudBees   Microsoft   Zenika
Feedback Général
Bugs
Publicité
Éditorial
InfoQ.com et tous les contenus sont copyright © 2006-2013 C4Media Inc. InfoQ.com est hébergé chez Contegix, le meilleur ISP avec lequel nous ayons travaillé.
Politique de confidentialité
BT