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.

  1. Trova il gestore più vicino per il tipo di eccezione;
  2. Rilassatevi lo stack fino al livello gestore;
  3. chiamare il gestore;
  4. 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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top