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

Posted

技术标签:

【中文标题】如何分析 Windows Crash Reporter 生成的 WERInternalMetadata.xml 文件?【英文标题】:How to analyse WERInternalMetadata.xml file generated by Windows Crash Reporter? 【发布时间】:2011-03-14 05:11:58 【问题描述】:

.Net 4.0 应用程序不断为用户崩溃,但对于他来说,我无法重现该错误。他附上了由 Windows Crash Reporter 生成的WERInternalMetadata.xml 文件。通过打开它,我发现它是一个 System.IO.FileNotFoundException 导致软件崩溃,但是,在该函数中没有调用任何函数会引发这种异常,所以这是其他地方或更深层次的问题。

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

<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>

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

【问题讨论】:

【参考方案1】:

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

<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

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

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

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

【讨论】:

非常感谢!我能够追踪到伪造的代码。另一方面,我正在捕获 UnhandledException 事件,但如果在新线程上引发异常,应用程序将冻结并且不会触发 UnhandledException。在新版本中,我使用 Tasks 而不是 Thread 解决了这个问题,因为 Tasks 让我可以捕获另一个线程上抛出的异常。

以上是关于如何分析 Windows Crash Reporter 生成的 WERInternalMetadata.xml 文件?的主要内容,如果未能解决你的问题,请参考以下文章

Find the build UUID in a Crash Report

Report WebCore crash to the ErrorReportUtils at:Fri Jul 24 09:59:08 格林尼治标准时间+0800 2015

求助,请各位帮我看看导致app crash的问题在哪里

如何抓取windows的dump?抓取dump

Linux Config: 如何终止ubuntu report system problem detect

iOS-----分析iOS Crash文件:符号化iOS Crash文件的3种方法