Come fare eccezioni lavoro (dietro le quinte) in C #
Domanda
Identica a " Come fare eccezioni lavoro (dietro la scene) in C ++ ", ma per C # .
So che alle fasi che seguono devono essere eseguite quando viene generata un'eccezione.
- Trova il gestore più vicino per il tipo di eccezione;
- Rilassatevi lo stack fino al livello gestore;
- chiamare il gestore;
- Trova e chiamare ogni blocchi
finally
.
In che modo .NET gestisce queste operazioni? Come funziona il mapping per i gestori di lavoro "corrente"? Quanto codice viene emessa in un blocco try / catch? E in un blocco di tiro?
Soluzione
L'articolo di Christopher Leggi Brumme; dà una spiegazione molto dettagliata di ciò che accade dietro le quinte nella gestione delle eccezioni CLR:
http://blogs.msdn.com/ b / cbrumme / archive / 2003/10/01 / 51524.aspx
Altri suggerimenti
.NET eccezioni Windows utilizzano il sistema operativo' sottostante Gestione delle eccezioni strutturata (SEH) meccanismo, allo stesso modo come codice nativo. Come descritto nella domanda legata per C (e C ++) .
NET eccezioni utilizzano il sottostante di Windows strutturata la gestione dell'attuazione eccezione, anche se questo è non un requisito. Mono può farlo in modo diverso.
In realtà, se si scrive un a linea singola console app che solo genera un'eccezione, e quindi eseguirlo in Windbg, vedrete il gancio nel gestione delle eccezioni non gestito.