Windbg erwartet eine andere Version von mscordacwks.dll

7

Ich habe ein sehr seltsames Problem beim Debuggen einer Minidump-Datei mit windbg. Ich habe dies sowohl auf meiner eigenen Maschine versucht und indem Sie windbg auf der Zielmaschine laufen lassen, von wo die Minidump genommen wurde, aber das Ergebnis ist in beiden Fällen das gleiche.

Am Anfang lade ich die erforderlichen dlls wie unten gezeigt, beachten Sie das gleiche Problem tritt auf, wenn ich die Sympathie zu Microsoft Symbolserver einstellen.

  

0: 000 & gt; .symfix c: \ sos

     

0: 000 & gt; .load C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ sos

Beim Überprüfen der Kette sieht alles gut aus, also gehe ich jetzt zum Ausführen! pe und erhalte einen Fehler über mscordacwks, der normalerweise, soweit ich weiß, anzeigt, dass ich die falsche Version des .net-Frameworks verwende. Aber das sollte wirklich nicht der Fall sein, da ich dies auf dem Zielrechner ausführe.

Ich mache dann eine ausführliche loading

  

.cordll -ve -u -l

und folgende Fehlermeldung erhalten

  

CLRDLL: C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ mscordacwks.dll: 4.0.30319.17929 f: 8   entspricht nicht der gewünschten Version 4.0.30319.296 f: 8

Was ich nicht verstehe ist, warum windbg nach einer älteren Version von mscordacwks sucht? Es scheint, dass der .296-Build die Version der Clr ist, die vom ms-Symbolserver heruntergeladen wird, aber ich habe ausdrücklich windbg angewiesen, die lokale Version zu verwenden.

Ich habe die vorgeschlagenen Ansätze ausprobiert hier und hier funktioniert aber nichts. Jede Hilfe wird sehr geschätzt.

    
Johnv2020 06.03.2013, 15:16
quelle

2 Antworten

9

Dies liegt daran, dass Sie einen .NET 4.0-Speicherauszug auf einem Computer mit .NET 4.5 installieren. Die zugrundeliegenden Debug-APIs wurden zwischen 4.0 und 4.5 geändert, sodass Sie einen .NET 4.0-Speicherauszug mit der .NET 4.5 SOS.dll nicht debuggen können. Was ich tue, ist, ein .NET 4.0 SOS in mein winext-Verzeichnis zu kopieren und es explizit zu laden, wenn ich einen .NET 4.0-Dump debugge.

    
Steve Johnson 07.03.2013, 13:25
quelle
9

Wie haben Sie die Schritte von WinDbg x64: Kann keinen Absturzspeicherauszug debuggen - Fehler beim Laden der Datenzugriffs-DLL ?

Sie sollen

  1. Kopieren Sie mscordacwks.dll vom Quellcomputer.
  2. Benennen Sie es um in mscordacwks_AMD64_AMD64_4.0.30319.296.dll.
  3. Löschen Sie diese DLL in den Ordner von WinDbg.exe.
  4. Reinitialisieren Sie die Debug-Sitzung (schließen und öffnen Sie WinDbg).

Wahrscheinlich erhalten Sie dann eine Fehlermeldung, dass WinDbg die SOS für diese Version von .NET 4 möchte, und Sie können

  1. Kopieren Sie sos.dll von der Quellmaschine und speichern Sie sie unter C: \ temp \ sos.dll.
  2. Verwenden Sie in WinDbg anstelle von .loadby sos clr .load C: \ temp \ sos.dll.
Lex Li 11.03.2013 05:59
quelle

Tags und Links