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

Resuelto Ian Boyd asked hace 14 años • 2 respuestas

Estoy tratando de descifrar el significado de los parámetros P1...P10 asociados con un mensaje clr20r3que se escribe 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 hosting ( por ejemplo 6.0.3790.1830 )
  • P3 : ??? ( p.ej 42435be1 )
  • P4 : el ensamblaje desde el cual se generó la excepción ( por ejemplo mrtables.webservice )
  • P5 : la versión de montaje ( por ejemplo 2.1.2.0 )
  • P6 : ??? ( p.ej 4682617f )
  • P7 : ??? ( p.ej 129 )
  • P8 : ??? ( p.ej 50 )
  • P9 : el tipo de excepción planteado ( por ejemplo system.argumentexception )
  • P10 : ??? ( p.ej NIL )

Buscar en Google 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, en lugar de conjeturas fundamentadas.


Editar: Si bien puedo esperar 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.

Lectura adicional

  • Excepción no controlada que provocó que la aplicación fallara con "EventType clr20r3, P1 w3wp.exe" en el registro, pero no hay detalles allí (pedimos ayuda con un problema, mientras nosotros pedimos una explicación canónica de lo que significan los parámetros)
Ian Boyd avatar Oct 29 '10 21:10 Ian Boyd
Aceptado

P7 y P8 son los importantes para averiguar dónde se planteó la excepción P9. Utilice P4 para saber qué conjunto buscar. Ejecute ildasm.exe y abra ese ensamblado. Archivo + Volcado, marque la casilla de verificación "Valores de token", haga clic en Aceptar y guarde el archivo .il en algún lugar.

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

.method /*06000129*/

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

P8 le proporciona la compensación IL. En el método encontrado, busque IL_0050 para ver la instrucción que generó la excepción. Mapearlo nuevamente con su código fuente es un poco complicado, pero probablemente lo resolverá. Utilice reflector si es necesario.

En general, escriba un controlador de eventos para AppDomain.UnhandledExceptionevitar la molestia de aplicar ingeniería inversa a estos depósitos de fallas de Watson. Registre el valor de e.ExceptionObject.ToString()para obtener tanto el mensaje de excepción como un seguimiento de la pila.

Hans Passant avatar Oct 29 '2010 15:10 Hans Passant

Aquí está la información sobre Watson Buckets

  1. Nombre del archivo ejecutable
  2. Número de versión del ensamblado del archivo exe
  3. Sello de archivo exe
  4. Nombre completo del ensamblado del archivo exe
  5. Versión de ensamblaje defectuosa
  6. Marca de tiempo del ensamblaje con errores
  7. Método de ensamblaje defectuoso def
  8. Método de falla IL Compensación 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
Naveen avatar Oct 29 '2010 14:10 Naveen