По каким критериям вы хотите ограничить количество выходов?
Опция -l просто ограничивает вывод в соответствии с номерами строк. Это бесполезно: допустим, он показывает только первые 10 объектов, возможно, искомого объекта даже нет в списке.
Если вывод слишком длинный для окна вывода WinDbgs, используйте .logopen для выгрузки объектов в файл, а затем просмотрите файл в текстовом редакторе.
Если у вас есть другие идеи о том, как выглядит ваш объект, вы можете выполнить цикл над всеми объектами
.foreach ( obj { !dumpheap -short -type MyType} )
и затем с помощью .if
решите, соответствует ли ваш объект этому критерию.
В качестве примера я искал иголку в стоге сена. Я искал конкретный Hashtable в программе с более чем 3000 Hashtables в куче. Команда, которую я пытался использовать, была
.foreach ( obj { !dumpheap -short -type Hashtable }) {.if (poi(poi(${obj}+1c)) > 100) {!do ${obj}} }
1C
- это смещение счетного члена хеш-таблицы.
100
- это число элементов, которое, как ожидалось, должно быть в Hashtable.
К сожалению, это не сработало для Hashtables сразу, потому что !dumpheap -type
также перечислил HashtableEnumerators, которые каким-то образом привели к сбою отладчика.
Чтобы вывести только хеш-таблицы, запустите !dumpheap -stat
и выясните таблицу методов хеш-таблиц и выполните команду с -mt <methodtable>
вместо -type <classname>
, что дает
.foreach ( obj { !dumpheap -short -mt <MT of Hashtable> }) {.if (poi(poi(${obj}+1c)) > 100) {!do ${obj}} }