2012-02-03 17 views
13

Estoy tratando de usar WinDBG para analizar un volcado de emergencia de una de nuestras máquinas de producción. La raíz de mi problema parece ser que tengo una versión diferente del framework .NET que la máquina de producción, solo que no sé cómo solucionar el problema. Cuando enciendo! SYM ruidosa y luego corro! DLK (de SOSEX) me sale el siguiente error, ya que trata de encontrar las mscordacwks dll¿Por qué WinDBG no puede encontrar 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. 

Tomé el mscorwks.dll, mscordawks.dll y sos.dll de la máquina de producción y los colocó en C: \ mysymbols. Parece que WinDBG está buscando un dll DENTRO de la dll mscorwks.

+1

Parece que está analizando un ensamblado .NET 2.0, pero el SOS cargado apunta a .NET 4.0. Consulte http://stackoverflow.com/questions/4373683/unable-to-load-sos-in-windbg –

+3

Utilice el comando ".chain" para ver el orden de las extensiones cargadas. A veces se cargan las dos versiones 2.0 /4.0 sos dll, lo que podría causar problemas. – Naveen

Respuesta

3

Después de comprobar el artículo aquí http://codenasarre.wordpress.com/2011/06/22/sending-an-sos/

Y entonces, básicamente, tratando cada encarnación de moverse alrededor de los símbolos que pude, me encontré con que la única manera de que pudiera conseguir este trabajo era copiar el mscorwks.dll, mscordawks. dll y sos.dll desde la máquina de producción en C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727

Parece que WinDBG no funciona tan bien con la versión múltiple de la misma DLL. Tal vez hice algo mal, pero al copiar los dlls directamente en el directorio de .NET Framework al menos pude ponerme en funcionamiento.

+0

No es debido a que WinDbg no pueda manejar varias versiones de mscordacwks.dll, pero usa el algoritmo de diseño por defecto para consultarlas (ya que tiene tantas versiones parcheadas), que es el estilo que usted adapta activamente. Una vez que te acostumbras a este hecho, no tendrás muchos problemas en el futuro. –

11

Este muy completo explanation by Doug Stewart me ayudó en esta situación.

Resumen:

  • Consigue el Mscordacwks.dll del sistema original.
  • Cambie el nombre a algo así como mscordacwks_AAA_AAA_2.0.50727.xxxx.dll (según su arquitectura y la versión del marco específico) - p. mscordacwks_x86_x86_2.0.50727.3607.dll para el caso específico en la pregunta.
  • Copie ese archivo en el directorio de windbg.exe.
+0

Después de una buena hora larga, ¡esto me puso a trabajar! – Rots

+1

@Rots, gracias por volver! – CodeFox

+3

gracias .. Esto funcionó para DebugDiag también ... copian en C: \ Archivos de programa \ DebugDiag –

0

Además de la respuesta de CodeFox, es necesario poner el directorio donde el mscorwks.dll (o clr.dll Si está utilizando .NET 4+) en la ruta de archivo de imagen en WinDbg (fuera del archivo menú).

8

Después de esto todo lo que se convierten en comandos 2 OK:

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

También he encontrado que el uso de la versión de 64 bits de windbg y la depuración de un "Cualquier CPU" logró proyecto de código en la que se establece la acumulación de "preferir 32 bit "causará este error.

Cuestiones relacionadas