问题描述
.Net 4.0 应用程序不断为用户崩溃,但对于他来说,我无法重现该错误.他附上了由 Windows Crash Reporter 生成的 WERInternalMetadata.xml
文件.通过打开它,我发现它是一个 System.IO.FileNotFoundException
导致软件崩溃,但是,在该函数中没有调用任何函数会抛出这种异常,所以问题在其他地方或更深.
A .Net 4.0 app keeps crashing for a user, but just for him, I could not reproduce the bug. He attached the WERInternalMetadata.xml
file generated by the Windows Crash Reporter. By opening it I found out that it's a System.IO.FileNotFoundException
that crashes the software, however, there are no functions called in that function that would throw that kind of exception, so the is problem somewhere else or deeper.
这是文件中最有趣"的部分.它包含(十六进制)数字,但我无法找出它们的含义.
This is the "most interesting" part of the file. It contains (hexadecimal) numbers, but I couldn't find out what they mean.
<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
更多的细节?
Is there a way to find out which code causes the exception, or at least to find out some more details than the FileNotFoundException
?
推荐答案
首先,这是 WER 跟踪中的内容:
Firstly, here's what's in that WER trace:
<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
You could use WinDBG and SOS to find out what that method is (e.g. 1620). See the example here on how to do it: http://blogs.msdn.com/b/oanapl/archive/2009/01/30/windows-error-reporting-wer-and-clr-integration.aspx
...或者,您可以在应用程序中连接 unhandledException 事件,并将异常堆栈跟踪打印到日志文件中,以查看导致问题的原因;例如
...Alternatively, you could hook up the unhandledException event in your application, and print out the exception stack trace to a log file, to see what caused the issue; e.g.
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);
}
这篇关于如何分析 Windows Crash Reporter 生成的 WERInternalMetadata.xml 文件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!