Как работают исключения (за кадром) в C # - PullRequest
19 голосов
/ 21 сентября 2010

Идентично " Как работают исключения (за кадром) в C ++ ", но для C # .

Я знаю, что следующие шаги должны бытьвыполняется при возникновении исключения.

  1. Найти ближайший обработчик для типа исключения;
  2. Развернуть стек до уровня обработчика;
  3. Вызвать обработчик;
  4. Найти и вызвать каждый finally блок.

Как .NET обрабатывает эти операции?Как работает сопоставление для «текущих» обработчиков?Сколько кода испускается в блоке try / catch?А в блоке броска?

Ответы [ 3 ]

15 голосов
/ 21 сентября 2010

Прочтите статью Кристофера Брамма; он дает очень подробное объяснение того, что происходит за кулисами в обработке исключений CLR:

http://blogs.msdn.com/b/cbrumme/archive/2003/10/01/51524.aspx

4 голосов
/ 21 сентября 2010

.NET-исключения в Windows используют ОС, лежащий в основе Структурная обработка исключений (SEH), так же, как и собственный код. Как указано в связанном вопросе для C (и C ++) .

3 голосов
/ 21 сентября 2010

.NET-исключения используют базовую реализацию структурированной обработки исключений Windows, хотя это , а не требование.Mono может делать это по-другому.

Фактически, если вы напишите однострочное консольное приложение, которое просто генерирует исключение, а затем запустите его в Windbg, вы увидите ловушку в обработке неуправляемых исключений.

...