如何分析Windows Crash Reporter生成的WERInternalMetadata.xml文件?

.Net 4.0应用程序不断为用户崩溃,但仅仅对他来说,我无法重现该错误。 他附加了Windows崩溃报告器生成的WERInternalMetadata.xml文件。 通过打开它,我发现它是一个崩溃软件的System.IO.FileNotFoundException ,但是,在该函数中没有调用会抛出这种exception的函数,所以在其他地方或更深处是问题。

这是文件中“最有趣”的部分。 它包含(hex)数字,但我无法找出它们的含义。

  CLR20r3 rstvshowtracker.exe 1.0.3842.33258 4c374e79 mscorlib 4.0.0.0 4ba1da6f 1620 14 System.IO.FileNotFoundException  

有没有办法找出导致exception的代码,或者至少找出比FileNotFoundException更多的细节?

首先,这是WER跟踪中的内容:

 rstvshowtracker.exe - your exe 1.0.3842.33258 - version of your exe 4c374e79 - exe timestamp mscorlib - assembly / module 4.0.0.0 - assembly version 4ba1da6f - assm timestamp 1620 - methodDef token of faulting method 14 - IL offset of faulting instruction System.IO.FileNotFoundException - exception 

您可以使用WinDBG和SOS来找出该方法是什么(例如1620)。 请参阅此处的示例: http : //blogs.msdn.com/b/oanapl/archive/2009/01/30/windows-error-reporting-wer-and-clr-integration.aspx

…或者,您可以在应用程序中挂接unhandledException事件,并将exception堆栈跟踪打印到日志文件中,以查看导致该问题的原因; 例如

 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); }