8

Gdy ngen jest wykonywany w aplikacji zarządzanej .NET w czasie instalacji, a zrzut awarii jest pobierany z Raportowania błędów systemu Windows dla aplikacji, jak można go użyć do zobacz ślad stosu, zmienne itp.?Jak debugować minizrzadkę WER "ngen" obrazu

Oto kilka informacji związanych z pytaniem: Mamy aplikację .NET, która zostanie zainstalowana. Kiedy się zawiesza z powodu nieobsługiwanego wyjątku .NET, awaria jest zgłaszana w systemie Windows Error Reporting i mogłem pobrać plik minidump.mdmp z witryny winqual.microsoft.com.

Umieszczam plik minidump.mdmp w folderze zawierającym pliki .dbg w celu kompilacji aplikacji, która uległa awarii, i kliknij dwukrotnie plik minidump.mdmp, aby otworzyć go w nowym wystąpieniu programu VS2008 SP1. Mój ślad stosu wygląda następująco:!!!

kernel32.dll RaiseException() + 0x3d bajtów
mscorwks.dll RaiseTheExceptionInternalOnly() + 0x295 bajtów
JIT_Throw() + 0x130 mscorwks.dll bajtów
MojaApl .ni.exe 000007feee74c84c!()
[ramki poniżej może być nieprawidłowe i/lub brak brak symbole załadowane do MyApp.ni.exe]
0000000070000d5e()
MyApp.ni.exe! 000007feee611000()
000000000300bf78()
000000000300bf60()

okno modułów wskazuje, że symbole są ładowane do systemu operacyjnego i .NET DLL, ale dla modułów aplikacyjnych, otrzymuję to:

MojaAplik.exe -> bez symboli rodzimych w pliku symbolu.
MyApp.ni.exe -> Nie znaleziono pasujących plików binarnych.
MyAppsLibrary.ni.dll -> Nie znaleziono pasujących binarnie.

+0

Może głupie pytanie, czy skompilować aplikację z DEBUG zdefiniowano więc byłoby stworzenie .pdb pliki? –

+0

To pytanie z Stack Overflow może być interesujące. http://stackoverflow.com/questions/850617/how-to-extract-debugging-information-fcr-a-crash –

+0

A to jest sekcja Geting Started do debugowania awarii. http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx#a http://www.microsoft.com/whdc/devtools/debugging/debugstart.mspx#a –

Odpowiedz

3

Najprostszym sposobem debugowania tych zrzutów jest Debugger systemu Windows (Windbg, cdb lub ntsd) i załadowanie rozszerzenia debuggera SOS (można wyszukać serwer SOS w celu uzyskania szczegółowych informacji).

Odkąd pamiętam, NGEN'ed część rzeczy nie powinna mieć znaczenia dla SOS tak długo, jak masz oryginalny EXE i symbole (Ponieważ to twoja aplikacja, oczekiwałbym, że masz non ngen ' ed exe i symbole).

0

Czy to żadną pomocą dla Ciebie:

Facet wydaje się być w stanie załadować niektóre symbole debugowania swój wniosek z zrzut awaryjny, miał ładowanie problemu poprawne symbole, ale ktoś odpowiedział na jego pytanie.

1

"Narzędzia do debugowania dla systemu Windows" (w szczególności WinDBG) ma ograniczone wsparcie dla zarządzanych aplikacji. Dostarczone z PDB powinieneś widzieć stos wywołań, w tym odniesienia do linii źródłowych. Aby zobaczyć wartości zmiennych, musisz użyć wtyczki SOS, która jest trudniejsza niż po prostu otwarcie okna stosu wywołań.

0

Ponieważ jest to kod zarządzany, konieczne może być ustawienie zmiennej środowiskowej _NT_EXECUTABLE_IMAGE_PATH w celu wskazania folderów, w których znajdują się pliki wykonywalne. W takim przypadku musisz zlokalizować folder w pamięci podręcznej NativeImage, która wskazuje na twoje złożenia. Debugger potrzebuje obrazów w celu załadowania zespołu.

1

Jeśli możesz poprosić klientów o ponowne uruchomienie aplikacji, poproś ich, aby uruchomili ją z następującym zestawem zmiennych środowiskowych: COMPLUS_ZapDisable = 1 W ten sposób CLR nie załaduje natywnych obrazów podczas działania aplikacji i zobaczysz swoje zwykłe moduły z symbolami na stosie.

http://referencesource.microsoft.com/faq.aspx