StackTrace e Eccezioni

di Cristian Civera, in .NET,

Prima di tutto una piccola parentesi OT: venerdì sarò al Whidbey Day quindi se volete insultarmi presentatevi pure davanti a me :-D

Ho avuto la necessità di poter sapere il chiamante e quindi lo stack di chiamate ad un metodo. Questo perché necessitavo del tipo della quale il chiamante è membro per poter caricare il relativo file di risorse.
Ho pensato quindi alle eccezioni che sanno indicare tutto lo stack, nome file e linea di codice (se in debug). Ho guardato quindi la classe Exception col mitico Reflector. La classe fa uso del tipo System.Diagnostics.StackTrace che è in grado di prelevare tutti gli StackFrame e di recuperare tutte quelle normali informazioni che dà l'eccezione relative al thread passatogli o all'attuale thread o all'eccezione passata.

Per esempio questo codice serve per sapere il chiamante:

StackTrace stack = new StackTrace(1);
StackFrame frame = stack.GetFrame(0);
Response.Write(frame.GetMethod());

L'intero passato al costruttore indica quanti frame skippare, in questo caso 1 perché il primo frame sarebbe l'attuale metodo. Ovviamente se mettiamo 0, a GetFrame va passato 1. GetMethod restituisce un MethodBase quindi possiamo conoscere la firma, il tipo, ed eventualmente invocare il metodo.

Magari ne eravate già a conoscienza; io non lo sapevo...

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Nella stessa categoria
I più letti del mese