Профилировщик Windbg и SciTech: не удалось загрузить DLL для доступа к данным для дампа памяти x64

Я знаю, что об этом спрашивали много раз, но я прочитал их все и не смог решить проблему.

По сути, у меня есть дамп памяти процесса IIS 7.0 x64 w3wp.exe, работающего как веб-роль в Azure. У меня есть несколько дампов, и я не могу загрузить ни один из них в Windbg или SciTech .Net Memory Profiler. Для обоих проблема, похоже, заключается в поиске правильной mscordacwks.dll.

Я получил mscordacwks.dll для x64 и x86 с машины, и это не смогло загрузить ни одну из них.

Поэтому, когда я хочу увидеть управляемые потоки и т. д. в Windbg, я получаю знакомую ошибку:

0:000> !threads
The version of SOS does not match the version of CLR you are debugging.  Please
load the matching version of SOS for the version of CLR you are debugging.
CLR Version: 4.0.30319.551
SOS Version: 4.0.30319.17929
CLRDLL: Unable to get version info for 'D:\Windows\Microsoft.NET\Framework64\v4.0.30319\mscordacwks.dll', Win32 error 0n87
DBGHELP: C:\Program Files\Debugging Tools for Windows (x64)\sym\mscordacwks_AMD64_AMD64_4.0.30319.551.dll\4F191DB4964000\mscordacwks_AMD64_AMD64_4.0.30319.551.dll - OK
CLRDLL: Loaded DLL C:\Program Files\Debugging Tools for Windows (x64)\sym\mscordacwks_AMD64_AMD64_4.0.30319.551.dll\4F191DB4964000\mscordacwks_AMD64_AMD64_4.0.30319.551.dll
Failed to load data access DLL, 0x80004005
Verify that 1) you have a recent build of the debugger (6.2.14 or newer)
            2) the file mscordacwks.dll that matches your version of clr.dll is 
                in the version directory or on the symbol path
            3) or, if you are debugging a dump file, verify that the file 
                mscordacwks_<arch>_<arch>_<version>.dll is on your symbol path.
            4) you are debugging on supported cross platform architecture as 
                the dump file. For example, an ARM dump file must be debugged
                on an X86 or an ARM machine; an AMD64 dump file must be
                debugged on an AMD64 machine.

Итак, я вижу здесь 2 странности:

  1. Windows развернута на диске D:\ в Azure (может ли это вызвать проблему?)
  2. Версия CLR: 4.0.30319.551, но версия SOS: 4.0.30319.17929

Так может ли это быть версия SOS 17929? mscordacwks.dll на сервере определенно 551.

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

заранее спасибо


person Aliostad    schedule 14.12.2012    source источник


Ответы (3)


PSSCOR4.dll от Microsoft является расширенным набором SOS.dll и работает со всеми версиями платформы .NET 4 до .NET 4.5. Спасибо Стиву Джонсону за разъяснение, что это не будет работать с .NET 4.5.

psscor4.dll можно загрузить с здесь

person Marc Sherman    schedule 18.12.2012

Технически всегда необходимо использовать ту же версию SOS, что и отлаживаемая среда выполнения. Однако обычно вы можете обойтись сопоставлением первых трех мест версии. В этом дампе, правда, .NET 4.0, а у вас версия SOS 4.5. Это никогда не сработает, потому что базовый API отладки был полностью изменен в .NET 4.5. Поэтому вам необходимо приобрести правильную версию SOS.dll.

person Steve Johnson    schedule 15.12.2012
comment
+1. Да, у меня есть .NET 4.5 на машине, в которой я подозревал проблему. Тем не менее, мы не смогли заставить его работать даже на машине без 4.5. - person Aliostad; 15.12.2012

ОК, я взял SOS.dll для той же коробки, и это исправило ее. Так что это то, что никто не говорит вам нигде в постах.

Вам нужны как SOS.dll, так и mscordacwks.dll с машины, на которой вы создали дампы, а не только mscordacwks.dll.

person Aliostad    schedule 14.12.2012
comment
PSSCOR4.dll от Microsoft является расширенным набором SOS.dll и работает со всеми версиями платформы .NET 4. - person Marc Sherman; 14.12.2012
comment
@MarcSherman спасибо. Вы не против опубликовать это как ответ, а не комментарий? Я приму это как ответ - моя проблема решена, но я проверил, что это тоже работает. Я нигде не видел, чтобы это упоминалось, и люди должны знать об этом. - person Aliostad; 15.12.2012
comment
Версия CLR в этом дампе — 4.0, но, просто чтобы уточнить, Psscor4 НЕ будет работать для .NET 4.5. - person Steve Johnson; 15.12.2012
comment
@SteveJohnson Итак, для .NET 4.5 единственным решением является использование SOS.dll, которая поставляется с .NET 4.5? - person Marc Sherman; 18.12.2012
comment
Да, это единственное расширение, предоставляемое MS. Однако SOSEX также работает для всех разновидностей .NET 2+. - person Steve Johnson; 19.12.2012