SOS kann nicht in WinDbg geladen werden

132

Hintergrund: Ich bin neu in WinDbg und versuche, es zum ersten Mal zum Laufen zu bringen. Ich möchte einen Speicherauszug untersuchen, den ich von einer laufenden ASP.NET 4-Site erstellt habe, die in IIS 7 unter Windows Server 2008 (x86) gehostet und auf meinen lokalen Computer heruntergeladen wurde.

Ich habe die Debugging-Tools installiert und WinDbg zum ersten Mal gestartet, um den Absturzspeicherauszug zu öffnen. Ich ging zu Datei | Symboldateipfad und legen Sie den Pfad fest *srv*c:\symbols*http://msdl.microsoft.com/download/symbols*und warten Sie, bis alle Symbole geladen sind.

Beim Versuch, SOS zu laden, sind Probleme aufgetreten. Zuerst habe ich den folgenden Befehl ausprobiert ...

.loadby sos mscorwks

... und erhielt die Antwort Unable to find module 'mscorwks'.

Nachdem ich das Web durchsucht hatte, versuchte ich, mscorwks zu laden, indem ich den folgenden Befehl ausführte ...

sxe ld mscorwks.dll
g

... und erhielt die Antwort "Kein ausführbarer Debuggees-Fehler in 'g'"

Ich habe SOS.dll (von C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319) in das WinDbg-Verzeichnis kopiert und 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 ich vorgehen soll. Ich möchte nur SOS laden und diese Dump-Datei durchsuchen. Jede Hilfe wäre sehr dankbar.

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

Kevin Babcock
quelle

Antworten:

203

Die CLR-Laufzeit-DLL wurde clr.dllmit .NET 4 umbenannt. Um die richtige Version von SOS zu laden, müssen Sie Ihren .loadbyBefehl anpassen . Dh

.loadby sos clr

Wenn Sie 64-Bit verwenden, sollten Sie auch die 32-Bit-Version der Debugging-Tools für Windows installieren , um 32-Bit-Apps zu debuggen. Sie werden nebeneinander installiert, sodass es kein Problem ist, sowohl die 32-Bit- als auch die 64-Bit-Version auf demselben Computer zu haben.

Ich würde davon abraten, SOS.dll zu kopieren. SOS muss mit der genauen Version des Frameworks übereinstimmen. Solange Sie es mit aus dem Framework-Verzeichnis laden .loadby, sind Sie fertig.

Brian Rasmussen
quelle
Ich finde es schwierig, beides auf mein System zu bringen, da die neuesten Installationsprogramme den CPU-Typ automatisch erkennen. Gibt es ein Override-Flag, das Sie für die MSI kennen? Ich werde eine alte 32-Bit-Version von WinDbg installieren, weiß aber nicht, was mich erwartet.
Dave
5
@ Dave: Vielleicht zu wenig zu spät, aber auf der Installationswebseite hier: msdn.microsoft.com/en-us/windows/hardware/gg463009.aspx können Sie auswählen, ob die weiterverteilbaren Pakete installiert werden sollen, mit denen MSIs für jede Architekturversion hier abgelegt werden : C: \ Programme \ Microsoft SDKs \ Windows \ v7.1 \ Redist \ Debugging-Tools für Windows
Aaron Lerch
Wenn ich sage, .loadby sos clrich bekomme Unable to find module 'clr'. Ich versuche, .NET 4 mit x64 WinDbg
Csaba Toth
2
@CsabaToth ist es ein Dump oder machst du Live-Debugging? Wenn Sie ein Live-Debugging durchführen, wurde die CLR möglicherweise noch nicht geladen. Sie können tun sxe ld clr, um zu stoppen, wenn die CLR geladen wurde, und dann können Sie SOS an diesem Punkt laden.
Brian Rasmussen
@BrianRasmussen Es ist eine kompilierte ausführbare Datei. Wenn ich mir das Modul-Fenster anschaue, wird es geladen.
Csaba Toth
18

Der WinDbg-Befehl 'g' bedeutet [Weiter]

Da Sie eine Dump-Datei öffnen, gibt es keine Möglichkeit, fortzufahren. Sie enthält nur den Prozessspeicher.

So die Meldung „No runnable Fehler Debuggees in‚g‘“ ist in Ihrem Fall logisch , da der Prozess nicht ausgeführt wird .

Verwenden Sie zum Laden der richtigen SOS-Version je nach .NET-Version den folgenden Befehl.

.NET 4 und höher .loadby sos

.NET 3.5 und 2 .loadby sos mscorwks

.NET 1.0 und 1.1 .load clr10 \ sos

HerbalMart
quelle
1

Die obigen Antworten müssen verbessert werden, da es im Laufe der Zeit einfacher war, mit dem Laden von SOS umzugehen.

JOHN ROBBINS hat einen schönen Artikel darüber. Sehen Sie, dass Microsoft-Symbolserver im Symboldateipfad konfiguriert sind und führen Sie! Analys -v an der windbg-Eingabeaufforderung aus. Dies führt den Trick aus, mit dem relevante sos-Dateien heruntergeladen werden. Um zu überprüfen, führen Sie .chain an der Eingabeaufforderung aus und Sie sehen die geladene DLL.

Kiran Prabhu
quelle
0

Ich bin gerade auf ein ähnliches Problem beim Laden von SOS gestoßen und habe festgestellt, dass das angegebene Modul nicht gefunden werden konnte. Haben Sie eine andere Lösung gefunden. Wenn Ihnen die Lösungen hier nicht weiterhelfen, probieren Sie Folgendes aus:

.loadby sos clr - angegebenes Modul konnte nicht gefunden werden

Denis
quelle