2013-03-06 11 views
7

Mam bardzo dziwny problem przy próbie debugowania pliku minidump przy użyciu windbg. Próbowałem tego zarówno na mojej maszynie &, uruchamiając windbg na maszynie docelowej, z której pobrano minizrzadkę, ale wynik jest taki sam w obu przypadkach.Windbg oczekuje innej wersji pliku mscordacwks.dll

Na początku ładuję wymagane biblioteki DLL, jak pokazano poniżej, zauważ, że ten sam problem występuje, jeśli ustawię sympath na serwerze symboli microsoft.

0: 000> .symfix c: \ SOS

0: 000> .load C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ sos

Kontrola łańcuch wszystko wygląda dobrze, więc teraz idę do uruchomienia! pe i dostaję błąd o mscordacwks, który normalnie, o ile mi wiadomo, wskazuje, że używam złej wersji platformy .net. Ale tak naprawdę nie powinno być w tym przypadku, ponieważ uruchamiam to na maszynie docelowej.

I wtedy zrobić opisowy załadunek

.cordll ve -u -l

i otrzymać następujący komunikat o błędzie

CLRDLL: C: \ Windows \ Microsoft .NET \ Framework \ v4.0.30319 \ mscordacwks.dll: 4.0.30319.17929 f: 8 nie pasuje do żądanej wersji 4.0.30319.296 f: 8

Czego nie rozumiem, to dlaczego windbg szuka starszej wersji mscordacwks? Wygląda na to, że kompilacja .296 jest wersją clr, która pobiera dane z serwera symboli ms, ale powiedziałem windbg, aby używała wersji lokalnej.

Próbowałem podejść sugerowanych here i here, ale nic nie działa. Każda pomoc jest bardzo doceniana.

+1

Wygląda na to, że przy próbie debugowania aplikacji .NET 4 przy użyciu SOS po zainstalowaniu programu .NET 4.5 zdarzają się podobne problemy. Zobacz np. u dołu: http://epiwiki.se/tools/windbg/analyze-the-dump-file/failed-to-load-data-access-dll,-0x80004005 i na środku: http://www.wintellect.com /cs/blogs/jrobbins/archive/2012/03/08/what-s-new-in-sos-for-net-4-5.aspx – Iridium

+0

może to wyjaśnić, jako pierwszą rzeczą, najnowszą wersję narzędzi do debugowania dla systemu Windows jest monit o zainstalowanie .net 4.5 – Johnv2020

+0

Z której wersji narzędzi do debugowania korzystasz? – lowleveldesign

Odpowiedz

9

Dzieje się tak, ponieważ debugujesz zrzut .NET 4.0 na komputerze z zainstalowanym .NET 4.5. Interfejsy API debugowania uległy znacznej zmianie w zakresie od 4.0 do 4.5, dzięki czemu nie można debugować zrzutów .NET 4.0 za pomocą pliku .NET 4.5 SOS.dll. Co mogę zrobić, to skopiować .NET 4.0 SOS do mojego katalogu winext i załadować go jawnie, kiedy debuguję zrzut .NET 4.0.

9

W jaki sposób wypróbowałeś etapy WinDbg x64: Cannot debug a crash dump - failed to load data access DLL?

Ci mają

  1. Kopiowanie mscordacwks.dll z urządzenia źródłowego.
  2. Zmień nazwę pliku na mscordacwks_AMD64_AMD64_4.0.30319.296.dll.
  3. Upuść tę bibliotekę DLL do folderu WinDbg.exe.
  4. Ponownie inicjuje sesję debugowania (zamykanie i ponowne otwieranie WinDbg).

Bardzo prawdopodobne, że pojawi się komunikat o błędzie z informacją, że WinDbg chce SOS dla tej wersji.NET 4 i możesz

  1. Skopiuj plik sos.dll z komputera źródłowego i zapisz go w C: \ temp \ sos.dll.
  2. W WinDbg zamiast wywoływać .loadby sos clr, użyj .load C: \ temp \ sos.dll.
Powiązane problemy