2012-09-25 14 views
7

Posso buttare del testo nella traccia dello stack?Scrittura nello stacktrace

La mia applicazione ha già un controllo sulle eccezioni generate. Ma vorrei avere qualche informazione in più su alcuni metodi (parametri).

L'idea era di fare qualcosa di simile

StackTrace.Insert (0, "argument:" + test); 

So che questo non è cool, ma è possibile?

+0

Sarebbe sufficiente? 'lancio nuova InvalidOperationException (" argument1: "+ test +", argument2: "+ test2);' –

+0

ma fermerà il mio metodo, no? –

+4

La soluzione potrebbe essere creare l'eccezione e inserire i parametri nella [Proprietà dizionario dati] (http://msdn.microsoft.com/en-us/library/system.exception.data (v = vs.100) aspx)? (Quindi lanciare l'eccezione ...) – erikH

risposta

13

Creare l'eccezione, e mettere i parametri nel Data dictionary property. Quindi generare l'eccezione ...

+1

È stata una risposta dal momento che il mio commento è stato votato come utile, e penso che sia più una risposta che un commento. – erikH

+0

Molto bello. La chiave è lanciare questa eccezione appena creata altrimenti lo StackTrace non verrà popolato. – puddinman13

2

Per definizione, la traccia di stack è un'uscita dei frame di stack attivi nel punto di esecuzione corrente in un programma, generalmente accessibile tramite un'eccezione.

@David Yaw ti ha dato il modo corretto di aggiungere ulteriori informazioni a una traccia di stack, mentre bolle sullo stack di eccezioni. Per riformulare, dovresti aggiungere i tuoi dati personalizzati solo allo stack trace, quando è il risultato di un'eccezione.

O creare una raccolta di elenchi accessibile centralmente per archiviare i dati di registrazione oppure utilizzare il try/catch corretto con l'eccezione di bubbling come consigliato da David.

per esempio.

try 
{ 
    doSomethingThatMightFailAndThrowAnException(); 
} 
catch (Exception ex) 
{ 
    throw new Exception("Here is some custom data to add to the trace...",ex); 
    // Notice adding the ex as the second parameter preserves the original exception trace 
} 
5

Giusto per aggiungere a @ eccellente risposta di erikH:

Oltre a utilizzare la proprietà Data, se avete bisogno disponibili fino dati aggiuntivi della catena eccezione, è possibile farlo per mezzo di un'eccezione personalizzata. Oltre alle metainformazioni fornite da un tipo personalizzato (un CommunicationException potrebbe significare un problema con I/O, un InvalidStateException potrebbe significare che il programma ha riscontrato uno stato non valido e così via) è possibile aggiungere ulteriori informazioni all'eccezione nel forma di campi personalizzati. I campi personalizzati sono particolarmente utili quando è necessaria la sicurezza del tipo che la proprietà Data non fornisce.

Problemi correlati