Вывод Limit! Dumpheap (windbg) для n объектов

При использовании команды windbg и running! dumpheap для просмотра адресов объектов, как вы можете ограничить определенное количество объектов. Единственный способ, которым я нашел, - использовать CTRL + BREAK и командной строки в блоге http://dotnetdebug.net/2005/07/04/dumpheap-parameters-and-some-general-information-on-sos-help-system/

-l X - печатает только Х элементов из каждой кучи, а не всех объектов.

По-видимому, в SOS.dll больше не существует

Ответы

Ответ 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}} }

Ответ 2

Что вы на самом деле ищете? Прежде чем смотреть на отдельные объекты, обычно сузить интересующую область.

Переключатель -stat показывает сводку для каждого типа объектов в куче.

DumpHeap [-stat] [-min] [- max] [-thinlock] [-mt] [-type] [start [end]]

  • Параметр -stat ограничивает вывод сводной статистикой.
  • Параметр -min игнорирует объекты, которые меньше размера параметра, указанного в байтах.
  • Параметр -max игнорирует объекты, размер которых больше размера, указанного в байтах.
  • Опция -thinlock сообщает ThinLocks. Для получения дополнительной информации см. Команду SyncBlk.
  • Параметр -mt содержит только те объекты, которые соответствуют заданной структуре MethodTable.
  • В параметре -type перечислены только те объекты, имя типа которых соответствует подстроке указанной строки.

Начальный параметр начинается с указанного адреса. Конечный параметр останавливает листинг по указанному адресу.

Ссылка.