Отладка кода дампа процесса
Мое приложение C# потребляет слишком много памяти рабочего набора, и я хочу видеть объекты, которые есть в памяти рабочего набора. Я выгрузил процесс и создал файл дампа как ответ на этот вопрос. Как использовать файл дампа для диагностики утечки памяти? Но я не могу отладить файл из Windbg, так как он говорит "невозможно загрузить clr", когда я набираю команду ".loadby sos clr". Также команды '! Dumpheap -stat' и '! Threads' также говорят, что 'не найдены потоки экспорта'. Пожалуйста, посоветуйте мне способ отладки этого дамп-файла и поиска объектов. Пожалуйста, предоставьте решение помимо использования VS2013 Ultimate.
4 ответа
Я рекомендую вам использовать расширения Psscor2 или Psscor4 (в зависимости от версии.NET, используемой вашим приложением). После настройки среды отладки (установка WinDbg и копирование в его папку файлов Psscor) загрузите файл дампа и загрузите соответствующую версию Psscor:
.load psscor4
Затем выполните команду для загрузки символов с серверов Microsoft (при необходимости), убедитесь, что у вас есть подключение к Интернету:
!symfix
И теперь у вас должен быть доступ ко множеству очень интересных команд (ищите! Help, чтобы перечислить их). Чтобы увидеть использование памяти по типу использования:
!dumpheap -stat
Чтобы увидеть общее использование памяти (iu означает, что будут включены также некорневые объекты):
!heapstat -iu
Вы также можете использовать инструмент VMMap, чтобы увидеть общее использование памяти процессом (не дамп памяти), чтобы увидеть, сколько его потребляется управляемой кучей.
Вы должны загружать SOS.DLL с помощью команды ".load _FULL_SOS_DLL_PATH_", а не с помощью ".loadby sos clr", потому что обычно устанавливаются разные платформы.NET, поэтому вы должны указать WinDbg загрузить правильную...
Какова ваша целевая структура?
.loadby sos clr
Команды.net 4, для отладки предыдущей версии 4 попробуйте использовать
.loadby sos mscorwks
Еще одна программа, которую вы можете использовать, которая гораздо проще для начинающих пользователей, чем WinDbg, - это инструмент диагностики отладки (из MSDN): http://www.microsoft.com/en-us/download/details.aspx?id=40336.
Когда я работал с этим, я просто создавал файл дампа, щелкая правой кнопкой мыши по процессу в диспетчере задач.