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.

Другие вопросы по тегам