gle*_*don 4 .net c# debugging windbg sos
我正在使用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
Run Code Online (Sandbox Code Playgroud)
由于我的机器已采用最近的安全补丁,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
Run Code Online (Sandbox Code Playgroud)
我已经下载并使用了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
Run Code Online (Sandbox Code Playgroud)
你可以尝试一下!
我找到解决此问题的唯一方法是从生成转储的计算机中获取SOS.dll.我现在已经发生了几次,这是唯一对我有用的解决方案.MS确实不会在符号服务器上放置所有版本的SOS.dlls,这真令人讨厌.
如果您在分析计算机上没有安装与在转储计算机上运行的完全相同的.NET版本,那么您真的需要的不仅仅是SOS.dll关闭转储计算机.
获取以下程序集:sos.dll,mscordacwks.dll和(可能)mscorwks.dll(如果是.NET 2)或clr.dll(.NET 4).
将它们全部放在分析机器上的目录中.以下示例假定C:\Debug.
复制,然后重命名mscordacwks机器以反映平台和内部版本号.请记住,AMD64如果不是来自Itanium,通常必须在此上下文中命名64位.
例子:
mscordacwks_x86_x86_2.0.50727.3625.dll
要么
mscordacwks_AMD64_AMD64_4.0.30319.269.dll
打开WinDbg,将该目录添加到执行路径,以便mscordacwks找到重命名的目录.
示例:".expand/C:\ Debug"
明确加载匹配的SOS
示例:".load C:\ Debug\sos"
快乐的调试!