2010-01-16 2 views
1

Кто-нибудь знает статью о деталях или макете памяти для дескриптора исключения в кадре стека?Как обработчик исключений регистрируется в кадре стека?

+0

В чем заключен контекст? Не могли бы вы предоставить немного больше информации. –

+0

Начните читать: http://blogs.msdn.com/cbrumme/archive/2003/10/01/51524.aspx –

ответ

1

Детали реализации очень хорошо скрыты. Ни блог Брумме, ни исходный код ротора не дают готового ответа. Одна вещь, которую я знаю, это то, что оператор try не генерирует никакого кода. Это оставляет мало возможных подходов. Я думаю, что это делается так же, как SEH в 64-битной Windows.

Я считаю, что компилятор JIT генерирует таблицу кодовых адресов с указателем функции на фильтр исключения, который вызывается при обработке исключения. Оператор throw вызывает стек, который просматривает обратные адреса метода. Таблица отображает обратный адрес в соответствующий фильтр исключений. Фильтр исключений решает, соответствует ли исключение условию catch в методе. И передает управление в код в предложении catch. Примечательно, что оператор Visual Basic Catch When (недоступный на C#) хорошо сочетается с тем, как SEH реализован в Windows.

У меня нет доказательств этого и я не знаю какого-либо авторитетного источника. Это всего лишь вероятный способ его работы.

Смежные вопросы