windbg sos版本不匹配问题解决

dumpheap 时提示:

0:105> !dumpheap -stat
The garbage collector data structures are not in a valid state for traversal.
It is either in the "plan phase," where objects are being moved around, or
we are at the initialization or shutdown of the gc heap. Commands related to
displaying, finding or traversing objects as well as gc heap segments may not
work properly. !dumpheap and !verifyheap may incorrectly complain of heap
consistency errors.
Error requesting GC Heap data
Unable to build snapshot of the garbage collector state

这种情况大部分是由于sos版本不匹配导致:

0:105> .cordll –ve –u –l

CLRDLL: Loaded DLL C:WindowsMicrosoft.NETFramework64v4.0.30319mscordacwks.dll
CLR DLL status: Loaded DLL C:WindowsMicrosoft.NETFramework64v4.0.30319mscordacwks.dll

.cordll –ve –u –l (小写的L ) 这个命令是控制调试和控制CLR的命令,-ve是显示详细信息,-u 卸载模块,-l (小写的L) 是加载模块,上面这个命令就是卸载CLR 调试模块,然后再加载CLR调试模块,并显示详细信息

貌似已经加载正确,此时,重新运行dumpheap,错误仍然存在。

当前系统mscordacwks.dll版本和dump来源系统版本不同,将来源系统对应版本的mscordacwks.dll复制到对应的搜索目录(Symbol File Path、Source File Path和Image File Path都可以),并重新加载。这个时候你会发现在Symbol File Path已经下载了对应的mscordacwks.dll运行时版本,比如:mscordacwks_AMD64_AMD64_4.0.30319.01.dll4BA21EEB965000mscordacwks_AMD64_AMD64_4.0.30319.01.dll。

调试机器和来源机器SOS.dll、clr.dll版本不一致,将来源机器的两个文件复制到一个指定目录。用.load命令加载这个版本的sos,再次执行~* e !clrstack,运行成功。之后执行sos的任何命令WinDbg都会提示如下信息(暂时忽略它):

http://www.cnblogs.com/junchu25/archive/2012/09/04/2670540.html

0:105> .chain
Extension DLL search Path:
    D:windbgWINXP;D:windbgwinext;D:windbgwinextarcade;D:windbgpri;D:windbg;D:windbgwinextarcade;C:Windowssystem32;C:Windows;C:WindowsSystem32Wbem;C:Program Files7-Zip;D:Program Files (x86)Microsoft SQL Server100ToolsBinn;D:Program FilesMicrosoft SQL Server100ToolsBinn;D:Program FilesMicrosoft SQL Server100DTSBinn;D:Program Files (x86)Microsoft SQL Server100ToolsBinnVSShellCommon7IDE;D:Program Files (x86)Microsoft SQL Server100DTSBinn;C:WindowsSystem32WindowsPowerShellv1.0;D:Program FilesJavajdk1.6.0_25in;D:Program FilesJavajdk1.6.0_25JREin
Extension DLL chain:
    sosex: image 4.5.0.0, API 1.0.0, built Wed Oct 03 22:57:55 2012
        [path: D:windbgsosex.dll]
 
   sos: image 4.0.30319.18408, API 1.0.0, built Thu Sep 06 14:07:11 2012
        [path: D:windbgsos.dll]

    C:WindowsMicrosoft.NETFramework64v4.0.30319sos: image 4.0.30319.18408, API 1.0.0, built Thu Sep 12 08:02:43 2013
        [path: C:WindowsMicrosoft.NETFramework64v4.0.30319sos.dll]
    dbghelp: image 6.13.0001.776, API 6.1.6, built Sat May 15 04:57:22 2010
        [path: D:windbgdbghelp.dll]
    ext: image 6.13.0001.776, API 1.0.0, built Sat May 15 04:57:40 2010
        [path: D:windbgwinextext.dll]
    exts: image 6.13.0001.776, API 1.0.0, built Sat May 15 04:57:13 2010
        [path: D:windbgWINXPexts.dll]
    uext: image 6.13.0001.776, API 1.0.0, built Sat May 15 04:57:09 2010
        [path: D:windbgwinextuext.dll]
    ntsdexts: image 6.1.7752.0, API 1.0.0, built Sat May 15 04:52:37 2010
        [path: D:windbgWINXP tsdexts.dll]

貌似加载了两个sos.dll

0:105> .unload sos
Unloading sos extension DLL
0:105> .chain
Extension DLL search Path:
    D:windbgWINXP;D:windbgwinext;D:windbgwinextarcade;D:windbgpri;D:windbg;D:windbgwinextarcade;C:Windowssystem32;C:Windows;C:WindowsSystem32Wbem;C:Program Files7-Zip;D:Program Files (x86)Microsoft SQL Server100ToolsBinn;D:Program FilesMicrosoft SQL Server100ToolsBinn;D:Program FilesMicrosoft SQL Server100DTSBinn;D:Program Files (x86)Microsoft SQL Server100ToolsBinnVSShellCommon7IDE;D:Program Files (x86)Microsoft SQL Server100DTSBinn;C:WindowsSystem32WindowsPowerShellv1.0;D:Program FilesJavajdk1.6.0_25in;D:Program FilesJavajdk1.6.0_25JREin
Extension DLL chain:
    C:WindowsMicrosoft.NETFramework64v4.0.30319sos: image 4.0.30319.18408, API 1.0.0, built Thu Sep 12 08:02:43 2013
        [path: C:WindowsMicrosoft.NETFramework64v4.0.30319sos.dll]
    dbghelp: image 6.13.0001.776, API 6.1.6, built Sat May 15 04:57:22 2010
        [path: D:windbgdbghelp.dll]
    ext: image 6.13.0001.776, API 1.0.0, built Sat May 15 04:57:40 2010
        [path: D:windbgwinextext.dll]
    exts: image 6.13.0001.776, API 1.0.0, built Sat May 15 04:57:13 2010
        [path: D:windbgWINXPexts.dll]
    uext: image 6.13.0001.776, API 1.0.0, built Sat May 15 04:57:09 2010
        [path: D:windbgwinextuext.dll]
    ntsdexts: image 6.1.7752.0, API 1.0.0, built Sat May 15 04:52:37 2010
        [path: D:windbgWINXP tsdexts.dll]


此时,只有一个sos了,在运行dumpheap试试:

0:105> !dumpheap -stat
Statistics:
              MT    Count    TotalSize Class Name
000007fef29fd978        1           24 System.Xml.Linq.XHashtable`1[[System.WeakReference, mscorlib]]
000007fef29fd880        1           24 System.Xml.Linq.XHashtable`1[[System.Xml.Linq.XName, System.Xml.Linq]]

推荐隔椅同事的文章,列举了各种可能:

http://www.cnblogs.com/softfair/p/The_version_SOS_not_match_version_of_CLR_PDB_symbol_for_clr_dll_not_loaded.html

SRV*c:mysymbol* http://msdl.microsoft.com/download/symbols

原文地址:https://www.cnblogs.com/thaughtZhao/p/4184670.html