Как анализировать файл werinternalmetadata.xml, сгенерированный репортером сбоя Windows?
-
13-09-2020 - |
Вопрос
A.NET 4.0 Приложение продолжает сбой для пользователя, но только для него, я не мог воспроизвести ошибку.Он прикрепил файл WERInternalMetadata.xml
, созданный репортером сбоя Windows.Открывая его, я обнаружил, что это генеракодицетагкод, который вылетает программное обеспечение, однако, в этой функции нет функций, которые будут бросать это исключение, поэтому то есть проблема где-то еще или глубже.
Это «самая интересная» часть файла.Он содержит (шестнадцатеричные) цифры, но я не мог узнать, что они имеют в виду.
<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>
.
Есть ли способ выяснить, какой код вызывает исключение или, по крайней мере, выяснить некоторые более подробные детали, чем System.IO.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
... Альтернативно, вы можете подключить событие undhandledException в вашем приложении и распечатайте трассировку стека исключения в файл журнала, чтобы увидеть, что вызвало проблему;например.
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);
}
.