Common Intermediate Language и системное программирование в Microsoft.Net. Макаров А.В - 68 стр.

UptoLike

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-код и