2012-02-03 6 views
13

Sto provando a utilizzare WinDBG per analizzare un crash dump da una delle nostre macchine di produzione. La radice del mio problema sembra essere che ho una versione diversa del framework .NET rispetto alla macchina di produzione, solo che non so come risolvere il problema. Quando accendo! SYM rumoroso e poi corro! Dlk (da SOSEX) ottengo il seguente errore nel tentativo di trovare il mscordacwks dllPerché WinDBG non riesce a trovare 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. 

ho preso il mscorwks.dll, mscordawks.dll e sos.dll da la macchina di produzione e li ha posizionati in C: \ mysymbols. Sembra che WinDBG stia cercando una DLL all'interno della mscorwks dll.

+1

Sembra analizzando un assembly .NET 2.0, ma il SOS caricato ha come destinazione .NET 4.0. Consulta http://stackoverflow.com/questions/4373683/unable-to-load-sos-in-windbg –

+3

Utilizza il comando ".chain" per visualizzare l'ordine delle estensioni caricate. A volte vengono caricate entrambe le versioni 2.0/4.0.0 sos dll che potrebbero causare problemi. – Naveen

risposta

3

Dopo aver controllato l'articolo qui http://codenasarre.wordpress.com/2011/06/22/sending-an-sos/

E poi fondamentalmente cercando ogni incarnazione di muoversi simboli in giro che ho potuto, ho scoperto che l'unico modo ho potuto ottenere questo lavoro è stato quello di copiare il mscorwks.dll, mscordawks. dll e sos.dll dal computer di produzione in C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727

Sembra che WinDBG non funzioni molto bene con più versioni della stessa DLL. Forse ho fatto qualcosa di sbagliato, ma copiare le DLL direttamente nella directory di .NET Framework almeno mi ha installato e funzionante.

+0

Non è perché WinDbg non può gestire più versioni di mscordacwks.dll, ma usa l'algoritmo di design per interrogarli (dato che ha così tante versioni con patch), che è lo stile che si adatta attivamente. Una volta che ti sarai abituato a questo fatto, non dovrai affrontare molti problemi in futuro. –

11

Questo molto completo explanation by Doug Stewart mi ha aiutato in questa situazione.

Sommario:

  • Prendi il Mscordacwks.dll dal sistema originale.
  • Rinominarlo in qualcosa come mscordacwks_AAA_AAA_2.0.50727.xxxx.dll (a seconda dell'architettura e della specifica versione del framework) - ad es. mscordacwks_x86_x86_2.0.50727.3607.dll per il caso specifico nella domanda.
  • Copia il file nella directory di windbg.exe.
+0

Dopo una buona lunga ora, questo mi ha fatto lavorare! – Rots

+1

@Rots, grazie per essere tornato! – CodeFox

+3

grazie .. questo ha funzionato anche per DebugDiag ... copiato in C: \ Programmi \ DebugDiag –

0

Oltre alla risposta di CodeFox, è necessario mettere la directory in cui il mscorwks.dll (o clr.dll se si sta utilizzando .NET 4+) nel percorso del file di immagine in WinDbg (off del file menu).

8

Dopo questa 2 comandi che tutto diventi OK:

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

Ho anche scoperto che utilizzando la versione a 64 bit di WinDbg e il debug di un "Qualsiasi CPU" è riuscito progetto di codice in cui è impostato l'accumulo di "preferire 32 bit "causerà questo errore.