2009-02-28 9 views
5

j'ai un type appelé Foo et il a un champ appelé longueur. Je veux écrire une seule instruction de boucle dans Windbg qui déchargera champ de longueur de toutes les instances d'objets de type Foo en tas managé?comment écrire une boucle dans Windbg comme ceci?

merci à l'avance, George

+0

Une très bonne réponse ici: http://stackoverflow.com/questions/3926562/inspect-field-on-all-instances-in-memory-dump – Bryan

Répondre

3

Voici un script que je ne l'ai pas testé, mais pourrait faire l'affaire pour vous. Je me suis basé au large des scripts de Tess pour dumping out all session variables on the heap for ASP.net.

r @$t0=0; 

$$ Loop to get all foo's 
.foreach (CurrentFoo {!dumpheap -type George.George2.Foo -short}){ 
    $$ Increment # of Foo's 
    r @$t0 = @$t0+1 

    .printf "Length:\t%d\n", poi(${CurrentFoo}+0xc); 
} 
.printf "Number of Foo's: %d\n\n\n\n\n\n\n\n\n", @$t0; 

L'astuce à celui-ci sera déterminer le nombre d'octets que la propriété de longueur est décalé par rapport à la référence principale Foo, et le remplacement de la « 0xc » dans le ligne printf avec le nombre correct d'octets de décalage.

Vous devriez être en mesure de le faire en passant simplement un! Dumpobject sur l'un de vos Foo et en regardant la structure de celui-ci.

Espérons que cela aide.

Questions connexes