¿De acuerdo con qué criterios desea limitar el número de salidas? La opción -l solo limita la salida de acuerdo con los números de línea. Esto es inútil: digamos que muestra solo los primeros 10 objetos, tal vez el objeto que estás buscando ni siquiera está en la lista.
Si la salida es demasiado larga para la ventana de salida de WinDbgs, use .logopen para volcar los objetos en un archivo y luego revise el archivo con un editor de texto.
Si tiene otras ideas de cómo el objeto se parece a, puede realizar un bucle sobre todos los objetos
.foreach (obj { !dumpheap -short -type MyType})
y luego decidir con .if
si o no su objeto coincide con este criterio.
Como ejemplo, estaba buscando una aguja en un pajar. Estaba buscando una Hashtable específica en un programa con más de 3000 Hashtables en el montón. El comando Traté de usar era
.foreach (obj { !dumpheap -short -type Hashtable }) {.if (poi(poi(${obj}+1c)) > 100) {!do ${obj}} }
1C
es el desplazamiento del miembro de recuento de la tabla hash.
100
es la cantidad de elementos que se espera que tenga el Hashtable al menos.
Lamentablemente no funcionó para Hashtables inmediatamente, porque !dumpheap -type
también enumeró HashtableEnumerators que de alguna manera colapsó el depurador.
para volcar tablas hash única, ejecute !dumpheap -stat
y averiguar la tabla de métodos de tablas hash y ejecute el comando con -mt <methodtable>
en lugar de -type <classname>
, lo que da
.foreach (obj { !dumpheap -short -mt <MT of Hashtable> }) {.if (poi(poi(${obj}+1c)) > 100) {!do ${obj}} }
Sé que esto es una cuestión de edad, pero lograste averiguar una respuesta? –