Używanie SOS w zrzucie z .NET 2 (mscorwks) i .NET 4 (clr)

Mam zrzut, który ma załadowane obie wersje .NET:

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 nie jestem pewien, której wersji SOS użyć. Oba ładują się bez problemów.

0:000> .loadby sos mscorwks
0:000> .loadby sos clr

Jak dowiem się, która wersja najlepiej sprawdza się w mojej analizie? Czy też zawsze będę potrzebował obu?

Czy .cordll -ve -u -l jest w tym przypadku niezawodny?

.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żyte polecenia:

~0s
k

=== UPDATE ===

.cordll w zasadzie jest w porządku. Domyślnie użyje struktury .NET 4. To zachowanie można zmienić.cordll -I.

Otrzymałem obie wersje SOS, które pasują do komputera docelowego i są ładowane ścieżką

.load C:\SOS\4.0.30319.296\SOS.dll

Zaktualizowałem WinDbg 6.2 do najnowszego 6.3. Wciąż nie lepiej.

Zapytałem również 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

Wszelkie próby uruchomienia!threads zawsze skutkuje

Nie można zażądać magazynu wątków.

Wszelkie próby uruchomienia!clrstack zawsze skutkuje

Nie można przejść zarządzanego stosu. Bieżący wątek prawdopodobnie nie jest wątkiem zarządzanym. Możesz uruchamiać! Wątki, aby uzyskać listę zarządzanych wątków w procesie.

=== UPDATE ===

Jak sugeruje Mario Hewardt, złożonego scenariusza z określeniem pełnej ścieżki SOS można uniknąć, ładując tylko jedno rozszerzenie SOS do procesu (lub rozładowując je w przypadku, gdy są już załadowane) lub możemy użyć.setdll zdefiniować domyślną wersję SOS, którą lubimy.

Nie poprawia to jednak analizy.

=== UPDATE ===

Próbowałem także rozładować jeden z modułów .NET.reload /u w nadziei, że WinDbg / SOS nie będzie już w konflikcie, ale nadal nie będzie szczęścia.

questionAnswers(2)

yourAnswerToTheQuestion