2009-06-23 2 views
0

Я создал большой дамп использования памяти и использовал! Dumpheap -stat и! Dumpheap -mt Я получил адрес двух больших строковых списков по 30 МБ каждый.Я получил адрес большого управляемого объекта в WinDbg, что дальше?

Я хочу узнать больше об этих списках. Что они содержат или какой кусок кода использует их.

Есть ли способ их найти?

0: 000> делать 2b370038 Имя: System.Object [] MethodTable: 71e240bc EEClass: 71c0da54 Размер: 33554448 (0x2000010) байт Массив: Уровень 1, количество элементов 8388608, тип класса Element Тип: System.Collections.Generic.List`1 [[System.String, mscorlib]] Поля: None

ответ

0

Чтобы получить информацию о экземплярах массива, вы можете использовать команду !dumparray с флагом -details. Однако следует предупредить, что сброс всего массива может занять некоторое время и вывести много текста.

Чтобы узнать, что хранит экземпляры в живых, используйте команду !gcroot. Вы также можете проверить команду !refs из файла sosex.dll.

sosex.dll также имеет команду !gcgen, которая может сообщать вам о генерации экземпляров. IIRC соответствующая команда была добавлена ​​в версию sos.dll CLR 4.0.

0

Я рекомендую вам попробовать .Net Memory Profiler (http://memprofiler.com) для изучения управляемого дампы памяти. Это намного проще, чем windbg. Хороший графический интерфейс, который вы можете использовать для поиска и изучения графиков ссылок. Вы также можете увидеть значения полей полей.

Смежные вопросы