Why can't WinDBG find the mscordacwks.dll?

18,488

Solution 1

This very complete explanation by Doug Stewart helped me in this situation.

Summary:

  • Get the mscordacwks.dll from the original system.
  • Rename it to something like mscordacwks_AAA_AAA_2.0.50727.xxxx.dll (depending on your architecture and the specific framework version) - e.g. mscordacwks_x86_x86_2.0.50727.3607.dll for the specific case in the question.
  • Copy that file into the directory of windbg.exe.

Solution 2

After this 2 commands everything become OK:

0:000> .symfix
0:000> .reload

Solution 3

After checking out the article here http://codenasarre.wordpress.com/2011/06/22/sending-an-sos/

And then basically trying every incarnation of moving symbols around that I could, I found that the only way I could get this working was to copy the mscorwks.dll, mscordawks.dll and sos.dll from the production machine into C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727

It seems that WinDBG doesn't do so well with multiple version of the same DLL. Maybe I did something wrong, but copying the dlls directly to the .NET Framework directory at least got me up and running.

Solution 4

I've also found that using the 64bit version of windbg and debugging a "Any CPU" managed code project where the build is set to "prefer 32 bit" will cause this error.

Share:
18,488
Jonathan Beerhalter
Author by

Jonathan Beerhalter

Updated on June 05, 2022

Comments

  • Jonathan Beerhalter
    Jonathan Beerhalter almost 2 years

    I'm trying to use WinDBG to analyze a crash dump from one of our production machines. The root of my problem seems to be that I have a different build of the .NET framework than the production machine, only I don't know how to fix the problem. When I turn !sym noisy and then run !dlk(from SOSEX) I get the following error as it tries to find the 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.
    

    I took the mscorwks.dll, mscordawks.dll and sos.dll from the production machine and placed them in C:\mysymbols. It looks like WinDBG is looking for a dll INSIDE the mscorwks dll.

  • Lex Li
    Lex Li about 12 years
    It is not because of WinDbg cannot handle multiple versions of mscordacwks.dll, but it uses the by-design algorithm to query them (as it has so many patched versions), which is the style you adapt to actively. Once you get used to this fact, you won't face much trouble in the future.
  • Dinesh Rajan
    Dinesh Rajan over 10 years
    thanks.. this worked for DebugDiag too... copied to C:\Program Files\DebugDiag
  • CodeFox
    CodeFox over 10 years
    @diinesh-rajan, thank you for drawing my attention to DebugDiag!