Команды SOS терпят неудачу во время живой отладки процесса, у которого загружено несколько версий CLR - PullRequest
6 голосов
/ 03 марта 2011

У меня есть приложение ASP.net 2.0, которое я пытаюсь отладить в реальном времени, используя Windbg и SOS.dll. Когда я присоединяю отладчик к процессу, я вижу, что он загружает версии CLR для 2.0 и 4.0. [Mscorwks.dll и CLR.dll]. Я загружаю SOS с помощью - .loadby sos mscorwks. После этого ни одна из моих команд SOS не работает. Я получил сообщение «Не удалось запросить хранилище потоков», «Не удалось получить информацию из системного домена» и т. Д.

Я узнал, что это связано с несоответствием в mscordacwks.dll для другой версии CLR. Но все решения, которые я нашел в Google по загрузке нужной версии mscordacwks с помощью команды cordll, не смогли решить мою проблему. В частности, я использовал .cordll –ve –lp, но, похоже, ничего не изменилось. При повторном выполнении команд "! Threads" я получаю

"Статус DLL CLR: загруженная DLL C: \ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319 \ mscordacwks.dll

Не удалось запросить threadstore "

Я видел еще одну запись в стеке потока вокруг этой проблемы. Но, к счастью для него, проблема исчезла до того, как было предложено решение, и это не дубликат этой записи

Будем весьма благодарны за любые подсказки, которые помогут мне использовать расширение SOS с двумя версиями CLR, загруженными в мой процесс.

Загрузка версий MSCORDACWKS выглядит следующим образом -

**0:033>** .cordll -e 
CLR DLL status: Loaded DLL C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\mscordacwks.dll 
**0:033>** .cordll -ve -u -lp C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscordacwks.dll
 CLR DLL status: No load attempts 
**0:033>** .cordll -e
 CLR DLL status: No load attempts
 **0:033>** !threads 
CLRDLL: Loaded DLL C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\mscordacwks.dll Failed to request ThreadStore 

Ответы [ 5 ]

1 голос
/ 18 ноября 2011

Сегодня у меня тоже есть та же проблема, все команды, которые я мог найти, просто не работают: (

Затем я попытался загрузить дамп с помощью более старого отладчика, он работает. Моя версия 6.7.5.0,к счастью, некоторые старые версии все еще доступны на моей машине:)

1 голос
/ 07 ноября 2011

У меня была такая же проблема, и у меня был контакт с Microsoft.Используя последнюю версию windbg, выпущенную во время конференции BUILD, я смог загрузить версию библиотеки доступа к данным .net 2.

Версия Windbg включена в Windows.8 комплект водителя .Мне удалось загрузить библиотеку доступа к данным mscorwks с помощью следующей команды:

.cordll -I mscorwks -lp <path to mscorwks dll>
0 голосов
/ 19 декабря 2017

Я все еще сталкиваюсь с этой проблемой сегодня.

Я нашел решение, которое работает для меня (предположим, что mscordacwks.dll и sos.dll хранятся в папке "C: \ sos"):

.cordll -I mscorwks -lp "C:\sos"
.loadby sos mscorwks
!clrstack

Это решение работает для WinDbg следующих версий:

  1. 10.0.15063 (из комплектов Windows 10)
  2. 6.2.9200 (из комплектов Windows 8.0)

Протестировано на Win7 x86 и Win10 x64.

0 голосов
/ 18 марта 2011

У меня было дело об этом с MS, и я получил ответ -

"это проблема с отладчиком, и команда разработчиков сейчас работает над этим."

Полагаю, мне придется подождать, пока в следующих выпусках windbg это не исправят, или изучить другие инструменты!

Спасибо!

0 голосов
/ 05 марта 2011
...