DebugDiag не показывает информацию стека.NET под.NET 4
Кажется, что есть простой ответ на этот вопрос, но я не смог его найти.
Рассматриваемый сценарий представляет собой консольное приложение C# .NET.
Я обычно использую DebugDiag 1.2 для проверки файлов.dmp, которые возникают из-за зависаний, с которыми мы сталкиваемся - обычно это проблемы блокировки потоков Они создаются с помощью опции DebugDiag "Create Full Userdump".
Недавно я начал компилировать приложение для.NET 4, чтобы начать использовать некоторые функции.NET 4. Однако я заметил, что при анализе этих файлов.dmp с помощью DebugDiag отсутствует вся информация о стеке.NET.
Если я изменю цель CLR обратно на.NET 3.5 и получу.dmp из нового исполняемого файла, там будет информация о стеке вызовов.NET.
Когда я смотрю на вывод DebugDiag, я вижу одну заметку, которая говорит:
Информация CLR
Версия CLR = 4.0.30319.17929 Расширение отладчика CLR = C: \ Program Files \ DebugDiag \ Exts \ psscor4.dll
.NET Threads Summary
Не удалось запросить ThreadStore
Я полагаю, что ключом к этой проблеме является "Не удалось создать запрашиваемое хранилище потоков", поскольку файл.NET 3.5 .DMP (использующий psscor2.dll) сообщает всю информацию о потоках в заголовке "Сводка потоков".
Проблема в том, что в.dmp отсутствует информация, или DebugDiag по какой-то причине не может ее получить?
3 ответа
В конечном счете, этот решил сам. Я послал вопрос об этом Microsoft, и они сказали, что DebugDiag 1.1 не поддерживает.NET 4+. Они выпустили v1.2 не так давно, что делает - снова работает как шарм:
http://www.microsoft.com/en-us/download/details.aspx?id=26798
Я столкнулся с той же проблемой, и для меня это помогло удалить psscor4.dll из подкаталога "exts" DebugDiag
В отчете DebugDiag мой CLR-runtime теперь отображается как:
CLR Information
CLR version = 4.0.30319.18052
CLR Debugger Extension = C:\Windows\Microsoft.NET\Framework\v4.0.30319\sos.dll
PS: пожалуйста, позаботьтесь о том, чтобы использовать правильную версию DebugDiag (32-битная или 64-битная).
Предполагая, что вы берете полный дамп, это может быть связано с тем, как он совмещает sos. В версии 3.5 он размещается совместно с помощью mscorlib, тогда как в CLR 4 он размещается совместно с помощью clr. Это будет зависеть от того, кто пишет debugdiag, чтобы быть терпимым к CLR 4.