2010-07-10 19 views
13

Una aplicación .Net 4.0 sigue fallando para un usuario, pero solo para él, no pude reproducir el error. Adjuntó el archivo WERInternalMetadata.xml generado por Windows Crash Reporter. Al abrirlo descubrí que es un System.IO.FileNotFoundException que bloquea el software, sin embargo, no hay funciones llamadas en esa función que arrojen ese tipo de excepción, por lo que el problema es otro o más profundo.Cómo analizar el archivo WERInternalMetadata.xml generado por Windows Crash Reporter?

Esta es la parte "más interesante" del archivo. Contiene números (hexadecimales), pero no pude averiguar lo que significan.

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

¿Hay una manera de saber qué código hace que la excepción, o por lo menos para saber algunos detalles más que el FileNotFoundException?

Respuesta

17

En primer lugar, esto es lo que hay en esa traza 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 

Usted podría utilizar WinDBG y SOS para averiguar lo que el método es (por ejemplo, 1620). Vea el ejemplo aquí en la forma de hacerlo: http://blogs.msdn.com/b/oanapl/archive/2009/01/30/windows-error-reporting-wer-and-clr-integration.aspx

... Como alternativa, puede conectar el evento UnhandledException en su aplicación, e imprimir el seguimiento de la pila excepción a un archivo de registro, para ver lo que causó el problema ; p.ej.

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

¡Muchas gracias! Pude rastrear el código falso. Por otro lado, estoy atrapando el evento UnhandledException, pero si se lanza una excepción en un nuevo hilo, la aplicación se congela y no se dispara ninguna excepción no controlada. En la nueva versión lo arreglé usando Tareas en lugar de Subproceso, porque Tasks me permite detectar las excepciones lanzadas en otro subproceso. – RoliSoft

Cuestiones relacionadas