كيفية تحليل ملف WERInternalMetadata.xml الذي تم إنشاؤه بواسطة Windows Crash Reporter؟

StackOverflow https://stackoverflow.com/questions/3218649

سؤال

يستمر تطبيق .Net 4.0 في التعطل بالنسبة للمستخدم، ولكن بالنسبة له فقط، لم أتمكن من إعادة إنتاج الخطأ.لقد أرفق WERInternalMetadata.xml الملف الذي تم إنشاؤه بواسطة Windows Crash Reporter.ومن خلال فتحه اكتشفت أنه 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?

هل كانت مفيدة؟

المحلول

أولاً، إليك ما يوجد في تتبع 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);
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top