windbg和SciTech profiler:无法为x64内存转储加载数据访问DLL

时间:2012-12-14 09:02:28

标签: .net windbg memory-profiling

我知道这已经被多次询问了,但我已经阅读了所有这些并且无法解决问题。

基本上我有一个在Azure中作为Web角色运行的IIS 7.0 x64 w3wp.exe进程的内存转储。我有多个转储,无法在windbg或SciTech .Net Memory Profiler中加载任何转储。对于两者,问题似乎是找到正确的mscordacwks.dll。

我从机器上获得了x64和x86 mscordacwks.dll,但无法加载任何内容。

因此,当我想在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.

所以我在这里看到两个奇怪的地方:

  1. Windows部署在Azure上的D:\驱动器上(这会导致问题吗?)
  2. CLR版本:4.0.30319。 551 但SOS版本:4.0.30319。 17929
  3. 那么可能是 17929 的SOS版本?服务器上的mscordacwks.dll肯定是 551

    我已经运行了你能想到的每一个命令行而没有解决问题。

    提前致谢

3 个答案:

答案 0 :(得分:2)

从技术上讲,始终要求使用与您正在调试的运行时相同的SOS版本。但是,通常可以匹配前三个版本的位置。但是在这个转储中,它是.NET 4.0,但你的SOS版本是4.5。这将无法工作,因为底层调试API在.NET 4.5中已完全更改。因此,您需要获取正确版本的SOS.dll。

答案 1 :(得分:2)

Microsoft的PSSCOR4.dll是SOS.dll的超集,适用于.NET 4.5之前的所有.NET 4框架版本。感谢Steve Johnson澄清它不适用于.NET 4.5。

psscor4.dll可以从here

下载

答案 2 :(得分:1)

好的,我抓住了同一个盒子的SOS.dll并修复了它。因此,帖子中的任何地方都是没有人告诉你

您需要从生成转储的计算机上同时使用SOS.dll和mscordacwks.dll - 而不仅仅是mscordacwks.dll。