Ограничить! Dumpheap (windbg) выходной для n объектов - PullRequest
15 голосов
/ 31 января 2009

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

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

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

Ответы [ 2 ]

6 голосов
/ 20 октября 2010

По каким критериям вы хотите ограничить количество выходов? Опция -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}} }
6 голосов
/ 31 января 2009

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

Параметр –stat показывает сводку по типам объектов в куче.

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

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

Параметр start начинает перечисление с указанного адреса. Конечный параметр прекращает перечисление по указанному адресу.

Ref .

...