Analizzare le Exception
Quando vengono generate delle Exception è buona norma scrivere un log per capire meglio cosa sia successo.
Di default la classe Exception di significativo esponse solamente la proprietà Message che di solito non è che ci dice davvero molto, invece se vogliamo sapere quale metodo di quale classe ha causato l'ecezzione allora dobbiamo analizzare lo StackTrace.
Nello StackTrace vengono inseriti tutti i metodi(compresi quelli del framework) che hanno causato l'ecezzione, e quindi recuperare anche il nostro metodo.
Per fare questo dobbiamo utilizzare proprio la classe StackTrace ipresente nel namespace System.Diagnostic.
Nello StackTrace è presente un'array di StackFrame che comprendono tutti i metodi che hanno causato l'eccezione.
Quindi vediamo come poter recuperare le informazioni
//inizializzo la classe StackTrace con la mia exception che si chiama innerException
StackTrace _stackTrace = new StackTrace(innerException);
StackFrame _stackFrame = null;
//per recuperare lo stackFrame eseguo un ciclo for per recuperare l'indice e utilizzo
// il metodo GetFrame
for(int i=0; _stackTrace.FrameCount; i++)
{
_stackFrame = _stackTrace.GetFrame(i);
}
Una volta ottenuto lo StackFrame posso recuperare
il metodo : GetMethod()
il file :GetFileName()
la linea di codice :GetFileNumber()
ma ancor più interessante utilizzando la reflection con il metodo GetMethod() possiamo recuperare la classe di appartenza del metodo attraverso queste due righe di codice
MethodBase mt = _stackFrame.GetMethod();
string class = mt.ReflectedType
mercoledì, 15 mar 2006 Ore. 12.57