In base a quali criteri si desidera limitare il numero di uscite? L'opzione -l limita semplicemente l'uscita in base ai numeri di riga. Questo è inutile: diciamo che mostra solo i primi 10 oggetti, forse l'oggetto che stai cercando non è nemmeno elencato.
Se l'output è troppo lungo per la finestra di output di WinDbgs, utilizzare .logopen per eseguire il dump degli oggetti in un file e quindi rivedere il file con un editor di testo.
Se avete altre idee come il vostro oggetto assomiglia, è possibile eseguire un ciclo su tutti gli oggetti
.foreach (obj { !dumpheap -short -type MyType})
e poi decidere con .if
o meno l'oggetto soddisfa questo criterio.
Ad esempio, stavo cercando un ago in un pagliaio. Stavo cercando una Hashtable specifica in un programma con più di 3000 Hashtables sullo heap. Il comando I provato ad utilizzare era
.foreach (obj { !dumpheap -short -type Hashtable }) {.if (poi(poi(${obj}+1c)) > 100) {!do ${obj}} }
1C
è l'offset del membro conteggio del tabella hash.
100
è il numero di voci che l'Hashtable avrebbe dovuto avere almeno.
Sfortunatamente non ha funzionato per Hashtables immediatamente, perché !dumpheap -type
elencava anche HashtableEnumerators che in qualche modo causava il crash del debugger.
per scaricare hashtables solo, eseguire !dumpheap -stat
e capire la tabella di modalità di tabelle hash ed eseguire il comando con -mt <methodtable>
invece di -type <classname>
, che dà
.foreach (obj { !dumpheap -short -mt <MT of Hashtable> }) {.if (poi(poi(${obj}+1c)) > 100) {!do ${obj}} }
fonte
2010-10-19 21:14:36
So che questa è una vecchia questione, ma siete riusciti a capire una risposta? –