2009-02-28 10 views
5

Ich habe einen Typ namens Foo und es hat ein Feld namens Länge. Ich möchte eine einzelne Schleifenanweisung in Windbg schreiben, die das Längenfeld aller Objektinstanzen vom Typ Foo im verwalteten Heap ablegt.Wie schreibt man eine Schleife in Windbg so?

Vielen Dank im Voraus, George

+0

Eine sehr gute Antwort hier: http://stackoverflow.com/questions/3926562/inspect-field-on-all-instances-in-memory-dump – Bryan

Antwort

3

Hier ist ein Skript, das habe ich nicht getestet, aber vielleicht den Trick für Sie tun. I basierte es weg von Tess' Skripte für 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; 

Der Trick zu dieser wird die Anzahl von Bytes sein, herauszufinden, dass die Länge Eigenschaft aus der Haupt Foo Referenz versetzt ist, und Ersetzen des ‚0xC‘ in der Printf-Zeile mit der korrekten Anzahl von Offset-Bytes.

Sie sollten in der Lage sein, dies zu tun, indem Sie einfach ein! Dumpobject auf einem Ihrer Foo's machen und die Struktur davon betrachten.

Hoffnung, das hilft.

Verwandte Themen