我正在尝试使用WinDBG来分析我们其中一台生产机器的崩溃转储。我的问题的根源似乎是我有一个不同于生产机器的.NET框架版本,只是我不知道如何解决问题。当我转!sym吵闹然后运行!dlk(来自SOSEX)我得到以下错误,因为它试图找到mscordacwks dll
0:000> !dlk
CLRDLL: c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscordacwks.dll:2.0.50727.3623 f:0
doesn't match desired version 2.0.50727.3607 f:0
SYMSRV: c:\mysymbols\mscordacwks_x86_x86_2.0.50727.3607.dll\4ADD5446590000\mscordacwks_x86_x86_2.0.50727.3607.dll not found
SYMSRV: http://msdl.microsoft.com/download/symbols/mscordacwks_x86_x86_2.0.50727.3607.dll/4ADD5446590000/mscordacwks_x86_x86_2.0.50727.3607.dll not found
SYMSRV: c:\mysymbols\mscordacwks_x86_x86_2.0.50727.3607.dll\4ADD5446590000\mscordacwks_x86_x86_2.0.50727.3607.dll not found
SYMSRV: c:\mysymbols\mscordacwks_x86_x86_2.0.50727.3607.dll\4ADD5446590000\mscordacwks_x86_x86_2.0.50727.3607.dll not found
SYMSRV: http://msdl.microsoft.com/download/symbols/mscordacwks_x86_x86_2.0.50727.3607.dll/4ADD5446590000/mscordacwks_x86_x86_2.0.50727.3607.dll not found
SYMSRV: c:\mysymbols\mscordacwks_x86_x86_2.0.50727.3607.dll\4ADD5446590000\mscordacwks_x86_x86_2.0.50727.3607.dll not found
CLRDLL: Unable to find mscordacwks_x86_x86_2.0.50727.3607.dll by mscorwks search
CLRDLL: Unable to find 'mscordacwks_x86_x86_2.0.50727.3607.dll' on the path
SYMSRV: c:\mysymbols\mscorwks.dll\4ADD5446590000\mscorwks.dll not found
SYMSRV: http://msdl.microsoft.com/download/symbols/mscorwks.dll/4ADD5446590000/mscorwks.dll not found
SYMSRV: c:\mysymbols\mscorwks.dll\4ADD5446590000\mscorwks.dll not found
DBGHELP: C:\Program Files\Debugging Tools for Windows (x86)\mscorwks.dll - file not found
SYMSRV: c:\mysymbols\mscorwks.dll\4ADD5446590000\mscorwks.dll not found
SYMSRV: http://msdl.microsoft.com/download/symbols/mscorwks.dll/4ADD5446590000/mscorwks.dll not found
SYMSRV: c:\mysymbols\mscorwks.dll\4ADD5446590000\mscorwks.dll not found
CLRDLL: Unable to find mscorwks.dll by search
CLRDLL: ERROR: Unable to load DLL mscordacwks_x86_x86_2.0.50727.3607.dll, Win32 error 0n2
Unable to initialize .NET data interface. Version 2.0.50727.3607 of mscordacwks.dll is required.
Locate and load the correct version of mscordacwks.dll. See documentation for the .cordll command.
我从生产机器上获取了mscorwks.dll,mscordawks.dll和sos.dll,并将它们放在C:\ mysymbols中。看起来WinDBG正在寻找mscorwks dll中的dll。
答案 0 :(得分:11)
在这种情况下,这个非常完整的explanation by Doug Stewart帮助了我。
要点:
mscordacwks_AAA_AAA_2.0.50727.xxxx.dll
(取决于您的体系结构和特定框架版本) - 例如mscordacwks_x86_x86_2.0.50727.3607.dll
针对问题中的具体案例。windbg.exe
。答案 1 :(得分:8)
在这2个命令之后,一切都变好了:
0:000> .symfix
0:000> .reload
答案 2 :(得分:3)
在此处查看文章http://codenasarre.wordpress.com/2011/06/22/sending-an-sos/
之后然后我基本上尝试了每一个移动符号的化身,我发现我能使这个工作的唯一方法是将mscorwks.dll,mscordawks.dll和sos.dll从生产机器复制到C: \ Windows \ Microsoft.NET \框架\ V2.0.50727
似乎WinDBG在同一DLL的多个版本中表现不佳。也许我做错了什么,但是直接将dll复制到.NET Framework目录至少让我开始运行。
答案 3 :(得分:1)
我还发现使用64位版本的windbg并调试“Any CPU”托管代码项目,其中构建设置为“prefer 32 bit”将导致此错误。
答案 4 :(得分:0)
除了CodeFox的答案之外,您还需要将mscorwks.dll(或者如果您使用.NET 4+的clr.dll)放在WinDbg中的图像文件路径中的目录(关闭)文件菜单)。