Подтвердить что ты не робот

Почему WinDBG не может найти файл mscordacwks.dll?

Я пытаюсь использовать WinDBG для анализа аварийного сброса с одной из наших производственных машин. Корень моей проблемы, похоже, заключается в том, что у меня есть другая сборка .NET framework, чем у производственной машины, только я не знаю, как исправить эту проблему. Когда я поворачиваюсь! Sym шумно, а затем бежит! Dlk (из SOSEX) Я получаю следующую ошибку, когда пытается найти dll mscordacwks

0:000> !dlk
CLRDLL: c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscordacwks.dll:2.0.50727.3623 f:0
doesn't match desired version 2.0.50727.3607 f:0
SYMSRV:  c:\mysymbols\mscordacwks_x86_x86_2.0.50727.3607.dll\4ADD5446590000\mscordacwks_x86_x86_2.0.50727.3607.dll not found
SYMSRV:  http://msdl.microsoft.com/download/symbols/mscordacwks_x86_x86_2.0.50727.3607.dll/4ADD5446590000/mscordacwks_x86_x86_2.0.50727.3607.dll not found
SYMSRV:  c:\mysymbols\mscordacwks_x86_x86_2.0.50727.3607.dll\4ADD5446590000\mscordacwks_x86_x86_2.0.50727.3607.dll not found
SYMSRV:  c:\mysymbols\mscordacwks_x86_x86_2.0.50727.3607.dll\4ADD5446590000\mscordacwks_x86_x86_2.0.50727.3607.dll not found
SYMSRV:  http://msdl.microsoft.com/download/symbols/mscordacwks_x86_x86_2.0.50727.3607.dll/4ADD5446590000/mscordacwks_x86_x86_2.0.50727.3607.dll not found
SYMSRV:  c:\mysymbols\mscordacwks_x86_x86_2.0.50727.3607.dll\4ADD5446590000\mscordacwks_x86_x86_2.0.50727.3607.dll not found
CLRDLL: Unable to find mscordacwks_x86_x86_2.0.50727.3607.dll by mscorwks search
CLRDLL: Unable to find 'mscordacwks_x86_x86_2.0.50727.3607.dll' on the path
SYMSRV:  c:\mysymbols\mscorwks.dll\4ADD5446590000\mscorwks.dll not found
SYMSRV:  http://msdl.microsoft.com/download/symbols/mscorwks.dll/4ADD5446590000/mscorwks.dll not found
SYMSRV:  c:\mysymbols\mscorwks.dll\4ADD5446590000\mscorwks.dll not found
DBGHELP: C:\Program Files\Debugging Tools for Windows (x86)\mscorwks.dll - file not found
SYMSRV:  c:\mysymbols\mscorwks.dll\4ADD5446590000\mscorwks.dll not found
SYMSRV:  http://msdl.microsoft.com/download/symbols/mscorwks.dll/4ADD5446590000/mscorwks.dll not found
SYMSRV:  c:\mysymbols\mscorwks.dll\4ADD5446590000\mscorwks.dll not found
CLRDLL: Unable to find mscorwks.dll by search
CLRDLL: ERROR: Unable to load DLL mscordacwks_x86_x86_2.0.50727.3607.dll, Win32 error 0n2
Unable to initialize .NET data interface. Version 2.0.50727.3607 of mscordacwks.dll is required.
Locate and load the correct version of mscordacwks.dll. See documentation for the .cordll command.

Я взял mscorwks.dll, mscordawks.dll и sos.dll с производственной машины и поместил их в C:\mysymbols. Похоже, что WinDBG ищет DLL INSIDE для dll mscorwks.

4b9b3361

Ответ 1

Это очень полное объяснение Дуга Стюарта помогло мне в этой ситуации.

Резюме:

  • Получить mscordacwks.dll из исходной системы.
  • Переименуйте его как-то вроде mscordacwks_AAA_AAA_2.0.50727.xxxx.dll (в зависимости от вашей архитектуры и конкретной версии фреймворка) - например. mscordacwks_x86_x86_2.0.50727.3607.dll для конкретного случая в вопросе.
  • Скопируйте этот файл в каталог windbg.exe.

Ответ 2

После этих 2 команд все становится нормально:

0:000> .symfix
0:000> .reload

Ответ 3

После проверки статьи здесь http://codenasarre.wordpress.com/2011/06/22/sending-an-sos/

И затем, в основном, пытаясь воплотить движущиеся символы вокруг меня, я обнаружил, что единственный способ получить эту работу - скопировать файлы mscorwks.dll, mscordawks.dll и sos.dll с производственной машины в C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727

Кажется, что WinDBG не очень хорошо работает с несколькими версиями одной и той же DLL. Возможно, я сделал что-то не так, но копирование dll непосредственно в каталог .NET Framework по крайней мере запустило меня.

Ответ 4

В дополнение к ответу CodeFox вам нужно поместить каталог, в котором mscorwks.dll(или clr.dll, если вы используете .NET 4+), в путь к файлу изображения в WinDbg (в меню "Файл" ).

Ответ 5

Я также обнаружил, что использование 64-битной версии windbg и отладка проекта управляемого кода "Any CPU", когда сборка настроена на "предпочтительно 32 бит", вызовет эту ошибку.