2012-08-02 1 views
3

Comment est-ce que je peux imprimer la valeur de chaîne de tous les objets System.String sur le clrstack courant du fil?WinDbg, SOS, comment vider toutes les chaînes sur la pile

Pseudo code pour ce que je veux faire:

foreach ($string in !dso -type System.String) !do $string 

ou mieux encore

foreach ($string in !dso -type System.String) !printstring $string 

encore mieux encore

foreach (distinct $string in !dso -type System.String) !printstring $string 

Merci!

Répondre

3

La dernière extension SOSEX (v4) a la commande !mdso qui a l'option de filtrage de type /t.

SOSEX - Copyright 2007-2012 by Steve Johnson - http://www.stevestechspot.com/ 
To report bugs or offer feedback about SOSEX, please email [email protected] 

mdso 
Usage: !sosex.mdso [Options] 

Dumps object references on the stack and in CPU registers in the current context 

Options: 

/t:typeFilter - Limits the output to objects whose type name matches the filter expression specified by "typeFilter". 
       Cannot be combined with the /mt option. 

donc une commande de !mdso /t:System.String devrait fonctionner.

+0

Merci, cela fonctionne bien car mdso affiche déjà le contenu de la chaîne –

1

Mon idée est de rechercher des références d'objets chaîne parmi les adresses de la pile. Par exemple, nous connaissons l'adresse de la pile inférieure (0x000000001821CEF0) et l'adresse de la pile principale (000000001821E3F0). Nous pouvons faire défiler toutes les adresses de cette plage (pas de 8 octets) et afficher les détails de l'objet.

.for (r $t0=0x000000001821CEF0;@$t0<000000001821E3F0;r [email protected]$t0+0x8){ !do poi(@$t0) } 
+0

Il n'y a pas d'indicateur '-type' (ni' -short') pour la commande '! Dso'. –

+0

Merci, mais cela ne fonctionne pas vraiment. Comme le dit Brian, il n'y a pas de drapeau de type (ni de drapeau -short, je pense) –

+0

oui, je viens de le trouver, je vais chercher une autre solution –

1

Utilisez! Sosex.strings. Cette commande vous permettra d'afficher les valeurs de toutes les chaînes ou de les filtrer par taille, contenu ou génération de GC.

+0

Merci. Cependant, cela perd la relation avec la pile particulière qui m'intéresse. Parfois, je trouve utile de regarder les N chaînes supérieures dans une pile d'appel, donc je voudrais avoir une commande qui ne fait que les dumper. –

+0

Je m'excuse. J'ai mal interprété votre question comme tas, plutôt que pile. –

+0

On dirait que votre sosex est toujours une très bonne solution en utilisant! Mdso /t:System.String comme suggéré par jcopenha –

Questions connexes