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

79

Estoy tratando de descifrar el significado de los parámetros P1 ... P10 asociados con un 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 ( p w3wp.exe . Ej. )
  • P2 : la versión del proceso de alojamiento ( p 6.0.3790.1830 . Ej. )
  • P3 : ??? ( por ejemplo 42435be1 )
  • P4 : la asamblea de la que se planteó la excepción ( p mrtables.webservice . Ej. )
  • P5 : la versión de montaje ( p 2.1.2.0 . Ej. )
  • P6 : ??? ( por ejemplo 4682617f )
  • P7 : ??? ( por ejemplo 129 )
  • P8 : ??? ( por ejemplo 50 )
  • P9 : el tipo de excepción generado ( p system.argumentexception . Ej. )
  • P10 : ??? ( por ejemplo 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 contraposición a 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 pila.

Lectura adicional

Ian Boyd
fuente

Respuestas:

81

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 completo del ensamblado del archivo exe
  5. Versión de montaje defectuosa
  6. Marca de tiempo de ensamblaje con errores
  7. Método de montaje defectuoso 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
Naveen
fuente
2
¿Tendría un enlace de referencia que documente el resto de los depósitos de Watson? El artículo vinculado solo menciona tres de ellos (y solo los menciona de pasada "Por ejemplo, el segmento P4 describe el módulo con fallas, el segmento P9 muestra el tipo de excepción que no se manejó y el segmento P8 representa el desplazamiento de IL en el que la excepción fue lanzado originalmente. " )
Ian Boyd
2
He agregado una muestra al respecto
Kiquenet
111

P7 y P8 son los importantes para averiguar dónde se planteó la excepción P9. Utilice P4 para saber qué ensamblaje 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 da el token de método, comienza con 0x06, produciendo el valor de 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 da la compensación IL. En el método. Encontrado, busque IL_0050 para la instrucción que generó la excepción. Mapearlo de nuevo a 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 el dolor de realizar ingeniería inversa en estos bloques de bloqueo de Watson. Registre el valor de e.ExceptionObject.ToString()para obtener el mensaje de excepción y un seguimiento de la pila.

Hans Passant
fuente
2
Si la excepción ocurre en el código de la biblioteca, es probable que necesite el seguimiento de la pila de todos modos para averiguar cuál de su código estaba en la pila. (Sería bueno si Microsoft modificara ese cuadro de diálogo para que sea más agradable para .NET.)
Jason Kresowaty
1
Además de manejar UnhandledException, también ayuda intentar / capturar directamente dentro de Main, ya que a veces el problema ocurre antes de que se instale el controlador UnhandledException.
Mark Lakata
1
Creo que esto me va a salvar a mi amigo. Tengo una aplicación ASP.NET que se cayó en mi regazo que sigue bloqueando el grupo de aplicaciones, y una lista de errores CLR20R3con un montón de esos Pvalores se registra justo en el momento del bloqueo. Puede ser complicado, pero probablemente me lleve a una solución, pero al final tendré que modificar este código y conseguir un registro real.
Mike Perrenoud
1
Muy útil +10 si pudiera - en mi caso fue una excepción StackOverFlow y mi blog de captura no se ejecutó.
Marc
1
Siguiendo esto, he encontrado que la función en la que nuestro código se bloquea es una función virtual abstracta .. método / * 06003452 * / public hidebysig newslot abstract virtual instance int32 Read ([in] [out] uint8 [] buffer, int32 offset, int32 count) cil managed {} // fin del método Stream :: Read
Steven Scott