WinDbg:SOS.dll x86 4.0.30319.237的副本

我正在使用WinDbg来查看进程转储。 转储已在具有.NET 4 SP1(4.0.30319.237)的x86服务器上进行。 我正在尝试使用x86版本的WinDbg在我的x64机器上进行调试,但是我遇到了以下问题。

0:000> !EEVersion 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.237 SOS Version: 4.0.30319.239 4.0.30319.237 retail Workstation mode SOS Version: 4.0.30319.239 retail build 

由于我的机器已采用最近的安全补丁,SOS DLL文件现在为4.0.30319.239版本,因此我无法在WinDbg中使用任何CLR扩展。 我已连接到Microsoft符号服务器并获得了正确版本的mscordacwks.dll

我在哪里可以获得SOS.dll版本4.0.30319.237的副本?

我上网的最佳匹配是通过.NET Framework 4的可靠性更新1 。 但是,这不能安装在我的机器上(我没有第二个),因为它已经被超越了。

恶梦!

我的情况差不多。

 0:000> !EEVersion 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.235 SOS Version: 4.0.30319.239 4.0.30319.235 retail Workstation mode SOS Version: 4.0.30319.239 retail build 

我已经下载并使用了psscor4,它没有抱怨,而且堆栈看起来很合理

 0:000> !psscor4.EEVersion 4.0.30319.235 retail Workstation mode SOS Version: 4.0.0.4 retail build 0:000> !psscor4.DumpStack OS Thread Id: 0x874 (0) Current frame: ntdll!KiFastSystemCallRet ChildEBP RetAddr Caller,Callee 002ec6c8 77d16a24 ntdll!NtWaitForSingleObject+0xc 002ec6cc 758e6f0f mswsock!SockWaitForSingleObject+0x1ba , calling ntdll!NtWaitForSingleObject 002ec70c 758e65cc mswsock!SockDoConnectReal+0x2c3 , calling mswsock!SockWaitForSingleObject 002ec77c 71a63267 clr!GetCompileFlags+0x144 , calling clr!_EH_epilog3 002ec780 76ee2f7d ws2_32!WahReferenceContextByHandle+0x63 002ec7a4 758e5fac mswsock!SockDoConnect+0x3a1 , calling mswsock!SockDoConnectReal 002ec7e4 76a82c6a kernel32!FlushInstructionCache+0x18 , calling ntdll!ZwFlushInstructionCache 

你可以尝试一下!

我找到解决此问题的唯一方法是从生成转储的计算机上获取SOS.dll。 我现在已经发生了几次,这是唯一对我有用的解决方案。 MS确实不会在符号服务器上放置所有版本的SOS.dlls,这真令人讨厌。

如果您在分析计算机上没有安装与在转储计算机上运行的完全相同的.NET版本,那么您真正需要的不只是转储计算机上的SOS.dll

  1. 获取以下程序集: sos.dllmscordacwks.dll和(可能) mscorwks.dll (如果是.NET 2)或clr.dll (.NET 4)。

  2. 将它们全部放在分析机器上的目录中。 以下示例假定C:\Debug

  3. 复制,然后重命名mscordacwks机器以反映平台和内部版本号。 请记住,如果不是来自Itanium,在此上下文中的64位通常必须命名为AMD64

    例子:

    mscordacwks_x86_x86_2.0.50727.3625.dll

    要么

    mscordacwks_AMD64_AMD64_4.0.30319.269.dll

  4. 打开WinDbg,将该目录添加到执行路径,以便找到重命名的mscordacwks

    示例:“。expand / C:\ Debug”

  5. 明确加载匹配的SOS

    示例:“。load C:\ Debug \ sos”

快乐的调试!