2014-01-07 3 views
1

My C# приложение потребляет слишком много памяти рабочего набора, и я хочу видеть объекты, которые есть в памяти заданного набора. Я сбросил процесс и создал файл дампа в качестве ответа на этот вопрос , How do I use a dump file to diagnose a memory leak? Но я не могу отлаживать файл из Windbg, поскольку он говорит «не может загрузить clr», когда я набираю команду «.loadby sos clr». Также команды «! Dumpheap -stat» и «! Threads» также говорят, что «Ничего не обнаружено». Пожалуйста, посоветуйте мне способ отладки этого сбрасываемого файла и поиска объектов. Предоставьте решение, кроме использования VS2013 Ultimate.Отладка кода дампа процесса

+0

Те, кто не может следовать методам Windbg, могут использовать программное обеспечение JustTrace для этой цели – user3164883

+0

Рабочий набор? Не беспокойтесь о рабочем наборе. Чем выше, тем лучше, потому что это означает, что он находится в ОЗУ и оперативной памяти быстро. И до тех пор, пока Windows решает, достаточно иметь ОЗУ для увеличения рабочего набора, это обычно нормально. –

ответ

1

Я рекомендую вам использовать Psscor2 или Psscor4 расширения (в зависимости от используемой вами версии .NET заявление). После настройки среды отладки (установка WinDbg и копирования в его папку Psscor файлов) файл дамп загрузки и загрузить соответствующую версию Psscor:

.load psscor4 

Затем выполнить команду для загрузки символов с сервера Microsoft (в случае необходимости), убедитесь, что у вас есть подключение к интернету:

!symfix 

И теперь вы должны иметь доступ к множеству очень интересных команд (обратиться за помощью к списку их!). Чтобы посмотреть информацию об использовании памяти на использование типа:

!dumpheap -stat 

Чтобы увидеть общее использование памяти (IU средства, которые также будут включены некорневых объекты):

!heapstat -iu 

Вы также можете использовать VMMap инструмент, чтобы увидеть общее использование памяти процесса (а не дампа памяти), чтобы увидеть, сколько из него потребляется управляемой кучей.

+0

Telerik JustTrace - это приложение, которое дает мне объекты в памяти рабочего набора. Те, кто не может это сделать с помощью Windbg, могут использовать это программное обеспечение – user3164883

0

Какова ваша целевая структура?

.loadby sos clr 

являются .net 4 команды, для отладки предыдущей версии 4 попытаться использовать

.loadby sos mscorwks 
+0

В настоящее время я использую .net 4.5. Но, как вы сказали, «.loadby sos mscorwks», похоже, работает. Почему не работает «.loadby sos clr» .net 4.5? Пожалуйста, совет – user3164883

+0

Попробуйте выполнить следующую команду перед загрузкой dll clr: «.cordll -ve -u -l» Это даст вам подробный результат, почему он не может загрузить определенную DLL – Dominik

+0

. Он говорит: «Состояние CLR DLL: нет попыток загрузки». Что это означает? – user3164883

2

Вы должны загрузить SOS.dll командой».load _FULL_SOS_DLL_PATH_ " а не". loadby sos clr ", потому что обычно существуют различные .NET frameworks, поэтому вам нужно проинструктировать WinDbg загрузить правильный ...

1

Другая программа, которую вы можете использовать, что намного проще для первых пользователей, чем WinDbg - это инструмент диагностики отладки (от MSDN): http://www.microsoft.com/en-us/download/details.aspx?id=40336.

Когда я работал с этим, я просто создал файл дампа, щелкнув правой кнопкой мыши процесс в диспетчере задач.

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