Wie analysiere ich die vom Windows Crash Reporter generierte WERInternalMetadata.xml-Datei?
-
13-09-2020 - |
Frage
Eine .Net 4.0-App stürzt bei einem Benutzer immer wieder ab, aber nur bei ihm konnte ich den Fehler nicht reproduzieren.Er hat das beigefügt WERInternalMetadata.xml
Datei, die vom Windows Crash Reporter generiert wurde.Als ich es öffnete, stellte ich fest, dass es sich um eine handelt System.IO.FileNotFoundException
Das führt zum Absturz der Software. Es gibt jedoch keine in dieser Funktion aufgerufenen Funktionen, die eine solche Ausnahme auslösen würden. Das Problem liegt also woanders oder tiefer.
Dies ist der „interessanteste“ Teil der Datei.Es enthält (hexadezimale) Zahlen, aber ich konnte nicht herausfinden, was sie bedeuten.
<ProblemSignatures>
<EventType>CLR20r3</EventType>
<Parameter0>rstvshowtracker.exe</Parameter0>
<Parameter1>1.0.3842.33258</Parameter1>
<Parameter2>4c374e79</Parameter2>
<Parameter3>mscorlib</Parameter3>
<Parameter4>4.0.0.0</Parameter4>
<Parameter5>4ba1da6f</Parameter5>
<Parameter6>1620</Parameter6>
<Parameter7>14</Parameter7>
<Parameter8>System.IO.FileNotFoundException</Parameter8>
</ProblemSignatures>
Gibt es eine Möglichkeit herauszufinden, welcher Code die Ausnahme verursacht, oder zumindest einige weitere Details herauszufinden? FileNotFoundException
?
Lösung
Erstens, hier ist, was in dieser WER-Spur steht:
<Parameter0>rstvshowtracker.exe</Parameter0> - your exe
<Parameter1>1.0.3842.33258</Parameter1> - version of your exe
<Parameter2>4c374e79</Parameter2> - exe timestamp
<Parameter3>mscorlib</Parameter3> - assembly / module
<Parameter4>4.0.0.0</Parameter4> - assembly version
<Parameter5>4ba1da6f</Parameter5> - assm timestamp
<Parameter6>1620</Parameter6> - methodDef token of faulting method
<Parameter7>14</Parameter7> - IL offset of faulting instruction
<Parameter8>System.IO.FileNotFoundException</Parameter8> - exception
Sie könnten WinDBG und SOS verwenden, um herauszufinden, was diese Methode ist (z. B.1620).Sehen Sie sich hier das Beispiel an, wie es geht:http://blogs.msdn.com/b/oanapl/archive/2009/01/30/windows-error-reporting-wer-and-clr-integration.aspx
...Alternativ können Sie das unhandledException-Ereignis in Ihrer Anwendung einbinden und den Ausnahme-Stack-Trace in einer Protokolldatei ausdrucken, um zu sehen, was das Problem verursacht hat;z.B.
static void MyHandler(object sender, UnhandledExceptionEventArgs args)
{
Exception e = (Exception) args.ExceptionObject;
// print out the exception stack trace to a log
}
public static void Main()
{
AppDomain currentDomain = AppDomain.CurrentDomain;
currentDomain.UnhandledException += new UnhandledExceptionEventHandler(MyHandler);
}