Ich habe einen Dump, die sowohl .NET-Versionen geladen sind:SOS Verwendung in einer Müllhalde mit .NET 2 (mscorwks) und 4 .NET (CLR)
0:000> lm m clr
start end module name
65490000 65aff000 clr (deferred)
0:000> lm m mscorwks
start end module name
6a980000 6af2c000 mscorwks (deferred)
Jetzt, welche Version von SOS ich unsicher bin benutzen. Beide laden ohne Probleme.
0:000> .loadby sos mscorwks
0:000> .loadby sos clr
Wie würde ich herausfinden, welche Version für meine Analyse am besten geeignet ist? Oder werde ich immer beides brauchen?
Ist .cordll -ve -u -l in diesem Fall zuverlässig?
.symfix c:\symbols
.cordll -ve -u -l
CLRDLL: C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscordacwks.dll:4.0.30319.18047 f:8
doesn't match desired version 4.0.30319.296 f:8
CLRDLL: Loaded DLL c:\symbols\mscordacwks_x86_x86_4.0.30319.296.dll\50484AA966f000\mscordacwks_x86_x86_4.0.30319.296.dll
CLR DLL status: Loaded DLL c:\symbols\mscordacwks_x86_x86_4.0.30319.296.dll\50484AA966f000\mscordacwks_x86_x86_4.0.30319.296.dll
Thread 0 zeigt mscorwks. Befehle verwendet:
~0s
k
=== UPDATE ===
.cordll
grundsätzlich ok. Standardmäßig wird .NET 4 Framework verwendet. Dieses Verhalten kann durch .cordll -I
geändert werden.
Ich habe beide Versionen von SOS erhalten, die durch Pfad
.load C:\SOS\4.0.30319.296\SOS.dll
Ich Upgrade von WinDbg 6.2 bis spätestens 6.3, dass der Zielcomputer und geladen entsprechen. Immer noch nicht besser.
Ich habe auch Steve Johnson, der Autor von SOSEX gefragt, der .cordll -I
vorgeschlagen hat, aber das funktioniert auch nicht in meinem Dump, weder mit Modulnamen noch mit Basisadresse.
.cordll -I clr
.cordll -I 65490000
Jeder Versuch !threads
immer zu laufen ergibt
fehlgeschlagen ThreadStor beantragen.
Jeder Versuch !clrstack
immer zu laufen ergibt
konnte nicht verwalteten Stapel laufen. Der aktuelle Thread ist wahrscheinlich kein verwalteter Thread. Sie können! -Threads ausführen, um eine Liste verwalteter Threads im Prozess zu erhalten.
=== UPDATE ===
Wie von Mario Hewardt deutet, kann der Komplex Szenario den vollständigen Pfad SOS mit Angabe von nur Laden eines SOS-Erweiterung in den Prozeß (oder im Falle einer Entladung vermieden werden, sie sind bereits geladen) oder wir können .setdll
verwenden, um die Standard-SOS-Version zu definieren, die wir mögen.
Dies verbessert jedoch nicht die Analyse.
=== === UPDATE
ich auch versucht haben, durch .reload /u
in der Hoffnung, eine der .NET Module Entladen dass WinDbg/SOS nicht mehr in einem Konflikt sein würde, aber noch kein Glück.
Es ist in der Tat hässlich. Das Problem tritt aufgrund unserer Plugin-Architektur auf. Die Anwendung selbst ist .NET2, daher wird zunächst .NET verwendet. Plugins verwenden dann .NET4, also wird auch dieses geladen. –