Я получил адрес большого управляемого объекта в WinDbg, что дальше?

StackOverflow https://stackoverflow.com/questions/1035738

  •  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.Приятный графический интерфейс, который вы можете использовать для поиска и изучения графиков ссылок.Вы также можете увидеть значения полей экземпляров.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top