2009-02-28 10 views
5

Tengo un tipo llamado Foo y tiene un campo llamado longitud. Quiero escribir una declaración de bucle único en Windbg que va a volcar el campo de longitud de todas las instancias de objetos de tipo Foo en el montón administrado?cómo escribir un ciclo en Windbg de esta manera?

gracias de antemano, George

+0

Una muy buena respuesta aquí: http://stackoverflow.com/questions/3926562/inspect-field-on-all-instances-in-memory-dump – Bryan

Respuesta

3

Aquí hay un script que no he probado, pero podrían hacer el truco para ti. Me basé fuera de los guiones de Tess para 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; 

El truco para éste será averiguar el número de bytes que la propiedad de longitud está desplazado de la principal referencia Foo, y la sustitución de la '0xc' en el línea printf con el número correcto de bytes de desplazamiento.

Debería poder hacer esto simplemente haciendo un! Dumpobject en uno de sus Foo y observando la estructura del mismo.

Espero que ayude.

Cuestiones relacionadas