Составители:
Рубрика:
3.4.5. Семантика обработки исключений
Давайте рассмотрим последовательность действий, осуществляемую
системой выполнения для обработки сгенерированного исключения.
Пусть в некотором методе инструкция, расположенная по некоторо-
му адресу, породила исключение. Система выполнения обрабатывает это
исключение в два этапа. Задача первого этапа – поиск подходящего для
этого исключения обработчика с фильтрацией. Задача второго этапа – вы-
полнение нужных обработчиков без фильтрации и передача управления
найденному во время первого этапа обработчику с фильтрацией.
Выполнение первого этапа начинается с просмотра массива предложе-
ний обработки исключений, принадлежащего методу, где произошло ис-
ключение. В этом массиве осуществляется поиск такого предложения, что:
1. оно описывает обработчик с фильтрацией;
2. адрес инструкции, породившей исключение, попадает в диапа-
зон адресов защищенной области этого предложения;
3. исключение удовлетворяет фильтру обработчика.
Таким образом, на первом этапе finally и fault-блоки пропускаются.
Кроме того, происходит последовательный вызов фильтров для блоков с
пользовательской фильтрацией.
Если в методе, внутри которого было сгенерировано исключение,
не оказалось подходящего предложения обработки исключений, то систе-
ма выполнения переходит на следующий метод в стеке вызовов (то есть,
на метод, из которого данный метод был вызван). В следующем методе си-
стема выполнения продолжает искать нужное предложение, причем в ка-
честве адреса инструкции, породившей исключение, используется адрес
инструкции, вызывающей предыдущий метод.
Первый этап может завершиться либо нахождением подходящего
предложения, либо обнаружением того факта, что подходящее предложе-
ние не существует на всей последовательности методов в стеке вызовов.
В первом случае система переходит к следующему этапу, а во втором – вы-
полнение программы аварийно завершается.
На втором этапе система выполнения повторно просматривает мас-
сивы предложений, вызывая все обработчики без фильтрации. Она оста-
навливается, когда доходит до предложения, найденного на первом этапе,
после чего вызывает обработчик, описываемый этим предложением.
3.5. Синтаксис ILASM
В составе .NET Framework SDK поставляется ассемблер ILASM, ко-
торый позволяет компилировать текстовые файлы, содержащие CIL-код и
Common Intermediate Language
123
a. если защищенная область предложения A находится внут-
ри защищенной области предложения B, то области фильт-
ра и обработчика предложения A также должны распола-
гаться внутри защищенной области предложения B;
b. если защищенная область предложения A не пересекается
с защищенной областью предложения B, то области фильт-
ров и обработчиков этих предложений тоже не должны пе-
ресекаться;
c. если защищенная область предложения A совпадает с за-
щищенной областью предложения B, то области фильтров
и обработчиков этих предложений не должны пересекать-
ся.
3.4.4. Ограничения на передачу управления
Передача управления внутрь защищенных областей, из них и между
ними и их обработчиками регламентирована следующими правилами:
1. Передача управления на обработчики осуществляется только
через механизм обработки исключений.
2. Существует только два способа передать управление извне на
защищенную область:
a. передача управления на первую инструкцию защищенной
области;
b. использование инструкции leave из области обработчика с
фильтрацией, связанной с данной защищенной областью
(область обработки связана с защищенной областью, если
их координаты указаны в одном и том же предложении об-
работки исключений).
3. Перед входом в защищенную область стек вычислений должен
быть пустым.
4. Для выхода из защищенной области, из области фильтра или из
области обработчика существуют только следующие возможно-
сти:
a. порождение исключения инструкцией throw;
b. использование инструкции leave из защищенной области
или области с фильтрацией;
c. использование инструкции endfilter из области фильтра;
d. использование инструкции endfinally из области без
фильтрации;
e. использование инструкции rethrow из области с фильтра-
цией.
122
CIL и системное программирование в Microsoft .NET
122 CIL и системное программирование в Microsoft .NET Common Intermediate Language 123 a. если защищенная область предложения A находится внут- 3.4.5. Семантика обработки исключений ри защищенной области предложения B, то области фильт- ра и обработчика предложения A также должны распола- Давайте рассмотрим последовательность действий, осуществляемую гаться внутри защищенной области предложения B; системой выполнения для обработки сгенерированного исключения. b. если защищенная область предложения A не пересекается Пусть в некотором методе инструкция, расположенная по некоторо- с защищенной областью предложения B, то области фильт- му адресу, породила исключение. Система выполнения обрабатывает это ров и обработчиков этих предложений тоже не должны пе- исключение в два этапа. Задача первого этапа – поиск подходящего для ресекаться; этого исключения обработчика с фильтрацией. Задача второго этапа – вы- c. если защищенная область предложения A совпадает с за- полнение нужных обработчиков без фильтрации и передача управления щищенной областью предложения B, то области фильтров найденному во время первого этапа обработчику с фильтрацией. и обработчиков этих предложений не должны пересекать- Выполнение первого этапа начинается с просмотра массива предложе- ся. ний обработки исключений, принадлежащего методу, где произошло ис- ключение. В этом массиве осуществляется поиск такого предложения, что: 3.4.4. Ограничения на передачу управления 1. оно описывает обработчик с фильтрацией; Передача управления внутрь защищенных областей, из них и между 2. адрес инструкции, породившей исключение, попадает в диапа- ними и их обработчиками регламентирована следующими правилами: зон адресов защищенной области этого предложения; 1. Передача управления на обработчики осуществляется только 3. исключение удовлетворяет фильтру обработчика. через механизм обработки исключений. Таким образом, на первом этапе finally и fault-блоки пропускаются. 2. Существует только два способа передать управление извне на Кроме того, происходит последовательный вызов фильтров для блоков с защищенную область: пользовательской фильтрацией. a. передача управления на первую инструкцию защищенной Если в методе, внутри которого было сгенерировано исключение, области; не оказалось подходящего предложения обработки исключений, то систе- b. использование инструкции leave из области обработчика с ма выполнения переходит на следующий метод в стеке вызовов (то есть, фильтрацией, связанной с данной защищенной областью на метод, из которого данный метод был вызван). В следующем методе си- (область обработки связана с защищенной областью, если стема выполнения продолжает искать нужное предложение, причем в ка- их координаты указаны в одном и том же предложении об- честве адреса инструкции, породившей исключение, используется адрес работки исключений). инструкции, вызывающей предыдущий метод. 3. Перед входом в защищенную область стек вычислений должен Первый этап может завершиться либо нахождением подходящего быть пустым. предложения, либо обнаружением того факта, что подходящее предложе- 4. Для выхода из защищенной области, из области фильтра или из ние не существует на всей последовательности методов в стеке вызовов. области обработчика существуют только следующие возможно- В первом случае система переходит к следующему этапу, а во втором – вы- сти: полнение программы аварийно завершается. a. порождение исключения инструкцией throw; На втором этапе система выполнения повторно просматривает мас- b. использование инструкции leave из защищенной области сивы предложений, вызывая все обработчики без фильтрации. Она оста- или области с фильтрацией; навливается, когда доходит до предложения, найденного на первом этапе, c. использование инструкции endfilter из области фильтра; после чего вызывает обработчик, описываемый этим предложением. d. использование инструкции endfinally из области без фильтрации; e. использование инструкции rethrow из области с фильтра- 3.5. Синтаксис ILASM цией. В составе .NET Framework SDK поставляется ассемблер ILASM, ко- торый позволяет компилировать текстовые файлы, содержащие CIL-код и
Страницы
- « первая
- ‹ предыдущая
- …
- 66
- 67
- 68
- 69
- 70
- …
- следующая ›
- последняя »