Dans le précédent billet, nous parlions des threads. Continuons… et intéressons-nous aux objets en mémoire.
!dso
(pour dump stack objets)
!dso affiche tous les objets .NET contenus dans la pile d’appel du thread courant. Nous pouvons ensuite regarder ceux qui nous intéressent. Voici à quoi cela ressemble :
Deux informations sont importantes ici :
Voici un extrait du résultat de !dso :
Pour obtenir plus d’information sur un objet, il suffit de faire double clic puis clic droit sur son adresse mémoire. Cela a le même effet que de faire une sélection de l’adresse puis un CTRL+C. A ce moment là, l’adresse est copiée dans le presse papier. Nous pourrons la coller par la suite avec un clic droit dans la zone de saisie ou un CTRL+V.
Prenons, par exemple, l’objet HttpRequest stocké sur la pile d’appel :
00000000039ae350 000000013f5df210 System.Web.HttpRequest
!do AdresseMemoire
(pour dump objet)
!do affiche l’objet ainsi que toute sa structure interne. Nous avons donc directement les valeurs des propriétés qui composent l’objet ou bien leur adresse mémoire. Nous pouvons donc renouveler la même opération sur les adresses mémoires des propriétés/objets qui nous intéressent.
Suivez le guide…
!do 000000013f5df210
!do 000000013f5e9658
Un dernier petit effort pour avoir l’url demandée par cette requête HTTP, voyons voir "m_String" :
!do 000000013f5e95d0
Enfin, nous y voila
String: http://localhost:80/BlogEngine/search.aspx?q=BlogEngine
Tout simplement fantastique ! :-) Et ce n’est que le début. "!DumpHeap -stat" vous connaissez ?
Bye, Sebastien.
>>> Suite : Debogage .NET avec WinDbg et SOS - Travaux Pratiques