Ответ 1
По каким критериям вы хотели бы ограничить количество выходов? Параметр -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
- это смещение элемента count хэш-таблицы.
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}} }