Я получил адрес большого управляемого объекта в WinDbg, что дальше?
-
10-07-2019 - |
Вопрос
Я создал дамп с высоким уровнем использования памяти и, используя !dumpheap -stat и !dumpheap -mt, я получил адреса двух больших строковых общих списков по 30 МБ каждый.
Я хочу узнать больше об этих списках.Что они содержат или какой фрагмент кода их использует.
Есть ли способ узнать их?
0:000> !сделайте 2b370038 Имя:Система.Объект[] Таблица методов:71e240bc Электронный класс:71c0da54 Размер:33554448 (0x2000010) байт Массив:Ранг 1, количество элементов 8388608, Тип CLASS Тип элемента:Система.Коллекции.Generic.List`1[[System.Строка, mscorlib]] Поля:Нет
Решение
Чтобы получить информацию о экземплярах массива, вы можете использовать !dumparray
команда с помощью -details
Отметить.Однако имейте в виду, что сброс всего массива может занять некоторое время и привести к выводу большого количества текста.
Чтобы узнать, что поддерживает экземпляры в рабочем состоянии, используйте !gcroot
команда.Возможно, вы также захотите ознакомиться с !refs
команда от sosex.dll.
sosex.dll также имеет !gcgen
команда, которая может сообщить вам о генерации экземпляров.IIRC соответствующая команда была добавлена в версию CLR 4.0 sos.dll .
Другие советы
Я рекомендую вам попробовать профилировщик .Net Memory Profiler (http://memprofiler.com) для изучения управляемых дампов памяти.Это намного проще, чем windbg.Приятный графический интерфейс, который вы можете использовать для поиска и изучения графиков ссылок.Вы также можете увидеть значения полей экземпляров.