8

Wenn ngen auf einer .NET-verwalteten Anwendung zur Installationszeit ausgeführt wird und ein Absturzspeicherauszug aus der Windows-Fehlerberichterstattung für die App abgerufen wird, wie kann er verwendet werden Sehen Sie einen Stack-Trace, Variablen usw.?Debuggen eines WER Minidumps eines "ngen" ed Bildes

Hier ist ein Hintergrund, der sich auf die Frage bezieht: Wir haben eine .NET-Anwendung, die bei der Installation gestartet wird. Wenn es aufgrund einer nicht behandelten .NET-Ausnahme abstürzt, wird der Absturz in der Windows-Fehlerberichterstattung ignoriert, und ich konnte die Datei minidump.mdmp von winqual.microsoft.com herunterladen.

Ich legte Minidump.mdmp in einen Ordner mit den .dbg-Dateien für den Build der App, die abgestürzt ist, und doppelt auf Minidump.mdmp, um es in einer neuen Instanz von VS2008 SP1 zu öffnen. Mein Stack-Trace sieht wie folgt aus:!

kernel32.dll Raiseexception() + 0x3D Bytes
mscorwks.dll RaiseTheExceptionInternalOnly() + 0x295 Bytes
mscorwks.dll JIT_Throw() + 0x130 Bytes
MeineAnw .ni.exe! 000007feee74c84c()
[Frames unten sein kann falsche und/oder fehlen, geladen keine Symbole für MyApp.ni.exe]
0000000070000d5e()
MyApp.ni.exe! 000007feee611000()
000000000300bf78()
000000000300bf60()

Das Fenster Module gibt an, dass Symbole für das OS und .NET-DLLs geladen werden, sondern auch für die Anwendungsmodule, bekomme ich diese:

MyApp.exe -> keine native Symbole in Symboldatei.
MyApp.ni.exe -> Keine passende Binärdatei gefunden.
MyAppsLibrary.ni.dll -> Keine passende Binärdatei gefunden.

+0

Vielleicht eine dumme Frage, haben Sie Ihre App mit DEBUG kompilieren so definiert, dass es die PDB-Dateien erzeugen würde? –

+0

Diese Frage von Stack Overflow könnte von Interesse sein. http://stackoverflow.com/questions/850617/how-to-extract-debugging-information-from-a-crash –

+0

Und dies ist ein Abschnitt gestartet Getting für Crash-Debugging. http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx#a http://www.microsoft.com/whdc/devtools/debugging/debugstart.mspx#a –

Antwort

3

Der einfachste Weg, diese Dumps zu debuggen, ist mit den Windows-Debuggern (Windbg, cdb oder ntsd) und die SOS-Debugger-Erweiterung zu laden (Sie können nach SOS für weitere Details suchen).

Soweit ich mich erinnere, sollte die NGEN'ed Teil der Sache für SOS nicht wichtig sein, solange Sie die ursprüngliche EXE und die Symbole haben (Da es Ihre App ist, würde ich erwarten, dass Sie die nicht ngen ' ed exe und Symbole).

0

dies eine Hilfe für Sie:

Der Mann einige Symbole in der Lage sein scheint zu laden seine Anwendung aus der Crash-Dump zu debuggen, hatte ein Problem beim Laden die richtigen Symbole, aber jemand beantwortete seine Frage.

1

"Debugging-Tools für Windows" (speziell WinDBG) hat eingeschränkte Unterstützung für Managed Apps. Wenn PDBs vorhanden sind, sollten Sie in der Lage sein, den Aufruf-Stack einschließlich der Quellzeilenreferenzen zu sehen. Um Variablenwerte zu sehen, müssen Sie das SOS-Plugin verwenden, was schwieriger ist, wenn Sie das Call-Stack-Fenster öffnen.

0

Da dies ein verwalteter Code ist, müssen Sie möglicherweise die Umgebungsvariable _NT_EXECUTABLE_IMAGE_PATH so einstellen, dass sie auf die Ordner verweist, in denen Ihre ausführbaren Dateien gespeichert sind. In diesem Fall müssen Sie den Ordner im NativeImage-Cache suchen, der auf Ihre Assemblies verweist. Der Debugger benötigt die Images, um die Assembly zu laden.

1

Wenn Sie die Clients erneut zur Ausführung Ihrer App auffordern können, bitten Sie sie, sie mit dem folgenden Umgebungsvariablensatz auszuführen: COMPLUS_ZapDisable = 1 Auf diese Weise lädt CLR die systemeigenen Images beim Ausführen Ihrer App nicht Sie werden Ihre üblichen Module mit Symbolen auf dem Stapel sehen.

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