Mam zrzut który obie wersje NET załadowane:Korzystanie SOS w wysypisko z .NET 2 (mscorwks) i .NET 4 (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)
teraz jestem niepewny, która wersja SOS używać. Oba ładują się bez problemów.
0:000> .loadby sos mscorwks
0:000> .loadby sos clr
Jak mogę się dowiedzieć, która wersja najlepiej pasuje do mojej analizy? Czy zawsze będę potrzebował obu?
Czy .cordll -ve -u -l jest wiarygodne w tym przypadku?
.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
Wątek 0 pokazuje mscorwks. używane polecenia:
~0s
k
=== UPDATE ===
.cordll
w zasadzie jest w porządku. Domyślnie będzie korzystał z platformy .NET 4. To zachowanie można zmienić przez .cordll -I
.
Otrzymałam obie wersje SOS, które pasują do danego komputera docelowego i ładowany przez ścieżki
.load C:\SOS\4.0.30319.296\SOS.dll
Mam przeniesieni z WinDbg 6.2 do najnowszej 6.3. Wciąż nie lepiej.
Poprosiłem też Steve'a Johnsona, autora SOSEX, który zasugerował .cordll -I
, ale to również nie działa w moim zrzucie, ani z nazwą modułu, ani z adresem bazowym.
.cordll -I clr
.cordll -I 65490000
Każda próba uruchomienia !threads
zawsze skutkuje
Nie można żądać ThreadStore.
Każda próba uruchomienia !clrstack
zawsze skutkuje
stanie chodzić zarządzanego stosu. Bieżący wątek prawdopodobnie nie jest zarządzanym wątkiem. Możesz uruchamiać wątki, aby uzyskać listę zarządzanych wątków w procesie.
=== UPDATE ===
Jak sugeruje Mario Hewardt kompleks scenariusz z określeniem pełną ścieżkę SOS można uniknąć tylko ładuje jedno rozszerzenie SOS do procesu (lub rozładunku w przypadku jednego są już załadowane) lub możemy użyć .setdll
do zdefiniowania domyślnej wersji SOS, którą lubimy.
Nie poprawia to jednak analizy.
=== UPDATE ===
Próbowałem również rozładunek jednego z modułów .NET przez .reload /u
w nadziei, że WinDbg/SOS nie byłby w konflikcie więcej, ale nadal nie ma szczęścia.
To rzeczywiście brzydki. Problem występuje z powodu naszej architektury wtyczek. Sama aplikacja jest .NET2, więc początkowo jest używany .NET. Wtyczki używają platformy .NET4, więc również zostaną załadowane. –