2010-07-10 4 views
13

Приложение .Net 4.0 продолжает рушиться для пользователя, но только для него я не смог воспроизвести ошибку. Он приложил файл WERInternalMetadata.xml, созданный Windows Crash Reporter. Открыв его, я обнаружил, что это System.IO.FileNotFoundException, что приводит к сбою программного обеспечения, однако в этой функции нет функций, которые бы выбрали это исключение, поэтому проблема находится где-то в другом месте или глубже.Как анализировать файл WERInternalMetadata.xml, созданный Windows Crash Reporter?

Это самая "интересная" часть файла. Он содержит (шестнадцатеричные) числа, но я не мог понять, что они означают.

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

ответ

17

Во-первых, вот что в этом 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); 
} 
+2

спасибо! Мне удалось проследить фиктивный код. С другой стороны, я улавливаю событие UnhandledException, но если исключение выбрано в новом потоке, приложение зависает и не запускается UnhandledException. В новой версии я исправил это, используя Tasks вместо Thread, потому что Tasks позволяет мне перехватывать исключения, которые были добавлены в другой поток. – RoliSoft

 Смежные вопросы

  • Нет связанных вопросов^_^