Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net windbg和SciTech profiler:无法加载x64内存转储的数据访问DLL_.net_Windbg_Memory Profiling - Fatal编程技术网

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

.net windbg和SciTech profiler:无法加载x64内存转储的数据访问DLL,.net,windbg,memory-profiling,.net,Windbg,Memory Profiling,我知道这个问题已经被问过很多次了,但是我已经阅读了所有的问题,并没有能够解决这个问题 基本上,我有一个IIS 7.0 x64 w3wp.exe进程的内存转储,该进程在Azure中作为web角色运行。我有多个转储,无法在windbg或SciTech.Net内存分析器中加载任何转储。对于这两者,问题似乎在于找到正确的mscordacwks.dll 我已从计算机获得x64和x86 mscordacwks.dll,因此无法加载其中任何一个 因此,当我想在windbg中看到托管线程等时,我会遇到一个熟悉的

我知道这个问题已经被问过很多次了,但是我已经阅读了所有的问题,并没有能够解决这个问题

基本上,我有一个IIS 7.0 x64 w3wp.exe进程的内存转储,该进程在Azure中作为web角色运行。我有多个转储,无法在windbg或SciTech.Net内存分析器中加载任何转储。对于这两者,问题似乎在于找到正确的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.
0:000>!线程
SOS的版本与正在调试的CLR的版本不匹配。请
加载与正在调试的CLR版本相匹配的SOS版本。
CLR版本:4.0.30319.551
SOS版本:4.0.30319.17929
CLRDLL:无法获取“D:\Windows\Microsoft.NET\Framework64\v4.0.30319\mscordacwks.dll”的版本信息,Win32错误0n87
DBGHELP:C:\Program Files\Debugging Tools for Windows(x64)\sym\mscordacwks\u AMD64\u AMD64\u 4.0.30319.551.dll\4F191DB4964000\mscordacwks\u AMD64\u AMD64\u AMD64\u 4.0.30319.551.dll-确定
CLRDLL:加载的DLL C:\Program Files\Debugging Tools for Windows(x64)\sym\mscordacwks\U AMD64\U AMD64\U 4.0.30319.551.DLL\4F191DB4964000\mscordacwks\U AMD64\U AMD64\U 4.0.30319.551.DLL
无法加载数据访问DLL,0x80004005
验证1)您是否拥有调试器的最新版本(6.2.14或更新版本)
2) 与您的clr.dll版本匹配的文件mscordacwks.dll是
在版本目录或符号路径上
3) 或者,如果正在调试转储文件,请验证该文件
mscordacwks______.dll位于符号路径上。
4) 您正在受支持的跨平台体系结构上进行调试
转储文件。例如,必须调试ARM转储文件
在X86或ARM机器上;必须创建AMD64转储文件
在AMD64机器上调试。
所以我在这里看到了两个奇怪的现象:

  • Windows部署在Azure上的D:\drive上(这会导致问题吗?)
  • CLR版本:4.0.30319.551但SOS版本:4.0.30319.17929
  • 那么,是否可能是SOS版本,即17929?服务器上的mscordacwks.dll肯定是551

    我已经运行了您可以想象的所有命令行,但没有解决问题


    提前感谢

    好的,我为同一个框抓取了SOS.dll,这就解决了它。因此,这是帖子中没有人告诉你的


    您需要从生成转储的计算机中同时使用SOS.dll和mscordacwks.dll,而不仅仅是mscordacwks.dll。从技术上讲,始终需要使用与正在调试的运行时相同版本的SOS。但是,您通常可以通过匹配前三个版本位置来完成。在这个转储中,虽然是.NET4.0,但您的SOS版本是4.5。这永远不会起作用,因为底层调试API在.NET4.5中已完全更改。因此,您需要获得正确版本的SOS.dll。

    PSSCOR4.dll是SOS.dll的超集,可用于.NET 4.5之前的所有.NET 4 framework版本。感谢Steve Johnson澄清它不能与.NET 4.5一起使用


    psscor4.dll可以从

    psscor4.dll下载,它是SOS.dll的超集,适用于所有.NET 4 framework版本。@MarcSherman谢谢。你介意把这篇文章作为回答而不是评论吗?我会接受它作为答案-我的问题解决了,但我检查了这也有效。我没有看到任何地方提到过这一点,人们需要知道这一点。此转储中的CLR版本是4.0,但为了澄清,Psscor4不适用于.NET 4.5。@因此对于.NET 4.5,唯一的解决方案是使用随.NET 4.5附带的SOS.dll?是的,这是MS提供的唯一扩展。然而,SOSEX也适用于所有口味的.NET2+。+1。是的,我在机器上安装了.NET4.5,我怀疑这就是问题所在。然而,即使在没有4.5版本的机器上,我们也无法让它工作。