2010-10-29 7 views
71

Sto cercando di decifrare il significato dei parametri P1 ... P10 associati a uno clr20r3 che viene scritto nel registro eventi quando la mia applicazione presenta un'eccezione.Decifrare i parametri di eccezione .NET clr20r3 P1..P10

Il migliore che ho been able to find è:

  • P1: il processo di hosting (ad es w3wp.exe)
  • P2: la versione processo di hosting (ad es 6.0.3790.1830)
  • P3: ??? (es42435be1)
  • P4: il gruppo da cui è stato generato l'eccezione (esmrtables.webservice)
  • P5: versione assembly (es2.1.2.0)
  • P6: ??? (, ad esempio4682617f)
  • P7: ??? (, ad esempio129)
  • P8: ??? (esempio50)
  • P9: il tipo di eccezione sollevata (esempiosystem.argumentexception)
  • P10: ??? (esempioNIL)

Googling for clr20r3 fornisce migliaia di valori dei parametri di campionamento, da cui qualcuno può tentare di derivare un modello.

Ma spero nella documentazione sui significati dei parametri, al contrario delle ipotesi formulate.


Edit: Mentre posso sperare per la documentazione canonica, davvero sarei felice di vedere l'eccezione gettata, a quale linea, con tanto di analisi dello stack.

risposta

67

Ecco le informazioni su Watson Benne

  1. Exe File Name
  2. Exe assemblaggio File numero di versione
  3. Exe File Stamp
  4. Exe file il nome completo di montaggio
  5. versione di assembly ha provocato l'errore
  6. Faulting assembly timestamp
  7. Fau lting metodo di assemblaggio def
  8. metodo fault IL Offset all'interno del metodo il fault
  9. Tipo di eccezione

Ed anche qui è un articolo MSDN sullo stesso.

Esempio:

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

Ti capita di avere un link di riferimento che documenta il resto delle benne watson? L'articolo collegato ne menziona solo tre (e succede solo a menzionarli di passaggio * "Ad esempio, il bucket P4 descrive il modulo in errore, il bucket P9 mostra il tipo di eccezione che non è gestito e il bucket P8 rappresenta l'offset IL a cui il l'eccezione è stata originariamente lanciata. "*) –

+2

Ho aggiunto un esempio su di esso – Kiquenet

100

P7 e P8 sono quelli importanti per scoprire dove l'eccezione è stata sollevata P9. Usa P4 per sapere quale gruppo cercare. Eseguire ildasm.exe e aprire quell'assembly. File + Dump, spuntare la casella "Valori Token", OK e salvare il file .il da qualche parte.

Aprire il file in un editor di testo. P7 ti dà il token del metodo, inizia con 0x06, producendo il valore del token "06000129". Cerca:

.method /*06000129*/ 

che vi dà il nome del metodo, sguardo da lì per trovare l'.class, che dà il nome della classe.

P8 fornisce l'offset IL. Dal metodo .method trovato, cercare IL_0050 per l'istruzione che ha generato l'eccezione. Mappare il codice sorgente è un po 'complicato, ma probabilmente lo capirai. Usa Reflector se necessario.

In generale, scrivere un gestore di eventi per AppDomain.UnhandledException per evitare il fastidio di decodificare questi bucket di crash Watson. Registrare il valore di e.ExceptionObject.ToString() per ottenere sia il messaggio di eccezione che una traccia dello stack.

+2

Se l'eccezione si verifica nel codice della libreria, è probabile che sia necessaria comunque la traccia dello stack per capire quale del codice era in pila. (Sarebbe bello se Microsoft modificasse quella finestra di dialogo per renderla più gradevole a .NET.) –

+1

Oltre a gestire UnhandledException, aiuta anche a provare/catturare direttamente all'interno di Main, poiché a volte il problema si verifica prima che il gestore di UnhandledException sia installato. –

+0

Penso che questo mi salverà amico mio. Ho un'applicazione ASP.NET che mi è crollata addosso che continua a bloccare il pool di applicazioni e un errore che elenca 'CLR20R3' con un sacco di quei valori 'P' viene registrato proprio durante il tempo di arresto. Potrebbe essere complicato, ma probabilmente mi porterà a una soluzione, ma alla fine dovrò modificare questo codice e fare un po 'di registrazione vera e propria. –

Problemi correlati