2010-12-07 7 views
124

Hintergrund: Ich bin neu in WinDbg und versuche, es zum ersten Mal zum Laufen zu bringen. Ich möchte einen Speicherabbild untersuchen, den ich von einer ausgeführten ASP.NET 4-Site in IIS 7 auf Windows Server 2008 (x86) geholt und auf meinen lokalen Computer heruntergeladen habe.SOS kann nicht in WinDbg geladen werden

installierte ich die debugging tools und startete WinDbg zum ersten Mal, den Crash-Dump öffnen. Ich ging zu Datei | Symbol Dateipfad und den Pfad auf "* srv * c: \ symbols * http: //msdl.microsoft.com/downloads/symbols*" setzen und darauf warten, dass alle Symbole geladen werden.

Wenn SOS zu laden versuchen, lief ich in Probleme. Zuerst habe ich versucht, den folgenden Befehl ...

.loadby sos mscorwks 

... und erhielt die Antwort „Kann Modul‚mscorwks‘finden“.

, nachdem die Bahn zum Scheuern, habe ich versucht mscorwks zu laden durch den folgenden Befehl ausführen ...

sxe ld mscorwks.dll 
g 

... und erhielt die Antwort "Nein runnable Debuggees Fehler in 'g'"

ich kopierte SOS.dll (von C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319) in das WinDbg-Verzeichnis, dann versucht ...

.load sos 

... und erhielt den Fehler ...

The call to LoadLibrary(sos) failed, Win32 error 0n193 
    "%1 is not a valid Win32 application." 
Please check your debugger configuration and/or network access. 

Ich bin mir nicht ganz sicher, wie es weitergeht. Ich möchte nur SOS laden und diese Dump-Datei durchsuchen. Jede Hilfe würde sehr geschätzt werden.

Fyi ... Ich versuche, die Dump-Datei zu öffnen, auf einer 64-Bit-Version von Windows 7 mit der 64-Bit-Version von Windbg.

Antwort

190

Die CLR-Laufzeit-DLL wurde umbenannt in clr.dll mit .NET 4. Um also die richtige Version von SOS zu laden, müssen Sie Ihren .loadby-Befehl anpassen. I.e.

.loadby sos clr 

Auch, wenn Sie auf 64-Bit sind, sollten Sie die 32-Bit-Version von Debugging Tools for Windows als auch um Anwendungen zu debuggen 32-Bit installieren. Sie installieren Seite-an-Seite, so dass es kein Problem gibt, sowohl die 32-Bit- als auch die 64-Bit-Version auf demselben Rechner zu haben.

Ich würde das Abraten SOS.dll kopieren. SOS muss der genauen Version des Frameworks entsprechen. Wenn Sie es also mit .loadby aus dem Framework-Verzeichnis laden, sind Sie fertig.

+0

Perfekt. Hat super funktioniert. Vielen Dank! –

+0

@Kevin: Mein Vergnügen. –

+0

Ich finde es schwierig, beide auf meinem System zu bekommen, da die neuesten Installer den CPU-Typ automatisch erkennen. Gibt es ein Override-Flag, das Sie für die MSI kennen? Ich werde eine alte 32bit-Version von WinDbg installieren, weiß aber nicht, was ich erwarten soll. – Dave

14

WinDbg Befehl ‚g‘ bedeutet [weiter]

Da Sie eine Dump-Datei dort Öffnung gibt keine Möglichkeit, ‚continue‘, es enthält nur den Prozessspeicher.

So wird die Meldung "No runnable Debuggees Fehler in 'g'" ist in Ihrem Fall logisch, da der Prozess nicht ist läuft.

In Bezug auf die korrekte Version von SOS Laden Sie den folgenden Befehl verwenden, auf der .NET-Version abhängig.

.NET 4 und höher.loadby sos

NET 3.5 und 2 .loadby sos mscorwks

.NET 1.0 und 1.1 .load Clr10 \ sos

0

Bin gerade auf ein ähnliches Problem beim Laden von SOS gestoßen und bekam "spezifiziertes Modul konnte nicht gefunden werden". Kam mit einer anderen Lösung, so wenn die Lösungen hier nicht Ihnen helfen, versuchen Sie dies aus:

.loadby sos clr - specified module could not be found

0

Antworten müssen für Verbesserung, da im Laufe der Zeit, die Dinge waren leichter zu sos Laden handhaben.

JOHN ROBBINS hat schöne article um es herum, sehen, dass Microsoft-Symbol-Server sind in Symbol Dateipfad konfiguriert und ausführen! Analyse -v auf windbg Eingabeaufforderung, dies wird den Trick tun, es wird relevante SOS-Dateien herunterladen. Um zu überprüfen, führen Sie. Chain in der Eingabeaufforderung und Sie werden die geladene DLL sehen.