.net exception clr

Descifrando los parámetros de excepción.NET clr20r3 P1..P10



exception (2)

Aquí está la información sobre Watson Buckets

  1. Nombre de archivo Exe
  2. Número de versión del ensamblado del archivo Exe
  3. Sello de archivo Exe
  4. Nombre de archivo completo del archivo Exe
  5. Versión de ensamblaje defectuoso
  6. Faulting assembly timestamp
  7. Faulting assembly method def
  8. Método de falla IL Offset dentro del método de falla
  9. Tipo de excepción

Y también aquí hay un artículo de MSDN sobre el mismo.

Muestra:

Problem Signature 01: devenv.exe Problem Signature 02: 11.0.50727.1 Problem Signature 03: 5011ecaa Problem Signature 04: Microsoft.VisualStudio.SharePoint.Project Problem Signature 05: 11.0.60226.0 Problem Signature 06: 512c2dba Problem Signature 07: 18a8 Problem Signature 08: 1d Problem Signature 09: System.NullReferenceException

Estoy tratando de descifrar el significado de los parámetros P1 ... P10 asociados con clr20r3 que se escriben en el registro de eventos cuando mi aplicación experimenta una excepción.

Lo mejor que he podido encontrar es:

  • P1 : el proceso de alojamiento ( por ejemplo, w3wp.exe )
  • P2 : la versión del proceso de alojamiento ( por ejemplo, 6.0.3790.1830 )
  • P3 : ??? ( por ejemplo, 42435be1 )
  • P4 : el conjunto desde el que se generó la excepción ( p mrtables.webservice Ej., mrtables.webservice )
  • P5 : la versión de ensamblaje ( ej. 2.1.2.0 )
  • P6 : ??? ( por ejemplo, 4682617f )
  • P7 : ??? ( por ejemplo, 129 )
  • P8 : ??? ( por ejemplo, 50 )
  • P9 : el tipo de excepción elevado ( por ejemplo, system.argumentexception )
  • P10 : ??? ( por ejemplo, NIL )

Google para clr20r3 proporciona miles de valores de parámetros de muestra, a partir de los cuales alguien puede intentar derivar un patrón.

Pero espero documentación sobre los significados de los parámetros, a diferencia de las suposiciones educadas.

Editar: Si bien puedo esperar la documentación canónica, realmente me alegraría ver que se lanza la excepción, en qué línea, completa con un seguimiento de la pila.


P7 y P8 son los más importantes para saber dónde se originó la excepción P9. Use P4 para saber qué ensamblaje buscar. Ejecute ildasm.exe y abra ese ensamblaje. File + Dump, marque la casilla "Token values", OK y guarde el archivo .il en algún lugar.

Abra el archivo en un editor de texto. P7 le proporciona el token de método, comienza con 0x06, produciendo el valor de token "06000129". Buscar:

.method /*06000129*/

Lo cual le da el nombre del método, busque desde allí para encontrar .class, que le da el nombre de la clase.

P8 te da el desplazamiento IL. Desde el método. Found, busque IL_0050 para la instrucción que generó la excepción. Volver a asignarlo a su código fuente es un poco complicado, pero probablemente lo resuelva. Use Reflector si es necesario.

En general, escriba un controlador de eventos para AppDomain.UnhandledException para evitar la molestia de aplicar ingeniería inversa a estos segmentos de Watson. Registre el valor de e.ExceptionObject.ToString() para obtener el mensaje de excepción y un seguimiento de la pila.