Recentemente ho dovuto sviluppare un modulo aggiuntivo per un servizio esistente sviluppato da un collega. Aveva messo un blocco try/catch nella funzione di lavoro principale per la cattura tutte le eccezioni unhadled che ribolliva a questo livello, li la registrazione con informazioni di stack trace ecc:Come implementare la gestione delle eccezioni di primo livello?
try
{
// do main work
}
catch(Exception ex)
{
// log exception info
}
Anche se questo rende il programma molto stabile (come in 'improbabile crash'), lo odio perché quando sto testando il mio codice, non vedo le eccezioni causate da esso. Naturalmente posso controllare il registro delle eccezioni e vedere se ci sono nuove voci, ma preferisco di gran lunga il feedback diretto di ottenere l'eccezione nel momento in cui viene lanciata (con il cursore sulla linea destra nel codice, per favore).
Ho rimosso questo livello superiore try/catch almeno mentre stavo ancora codificando e testando. Ma ora il mio compito è finito e devo decidere se rimetterlo per il rilascio, o no. Penso che dovrei farlo, perché rende il servizio più stabile, e il punto è che funziona in background senza bisogno di supervisione. D'altra parte ho letto che si dovrebbero chiamare solo eccezioni specifiche (come in IoException
), non genericamente Exception
.
Qual è il tuo parere su questo problema?
A proposito, il progetto è scritto in C#, ma sono anche interessato alle risposte per i linguaggi non .NET.
Vedere anche http://stackoverflow.com/questions/576532/is-dying-is-awesome-preferred – Brian