Цепочка вызовов

Цепочка вызовов

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

Рис. 12.1.  Цепочка вызовов

Пусть r0 будет корневой процедурой некоторой системы (в Ada это программа main). В каждый момент выполнения есть текущая программа, вызванная последней и ставшая причиной исключения. Пройдем по цепочке в обратном порядке, начиная с текущей программы, от вызываемой к вызывающей программе. Реверсная цепочка (r0, последняя вызванная r0 программа r1, последняя вызванная r1 программа r2 и так далее до текущей программы) называется цепочкой вызовов.

Если возникает исключение, то для его обработки, возможно, придется подняться по цепочке, пока не будет достигнута программа, способная справиться с исправлением ситуации. Этот процесс заканчивается, когда достигнута программа r0 и не найден нужный обработчик исключения.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг:

7.2.6.1. Цепочка bad_tcp_packets

Из книги автора

7.2.6.1. Цепочка bad_tcp_packets Эта цепочка предназначена для отфильтровывания пакетов с «неправильными» заголовками и решения ряда других проблем. Здесь отфильтровываются все пакеты, которые распознаются как NEW, но не являются SYN пакетами, а так же обрабатываются


7.2.6.2. Цепочка allowed

Из книги автора

7.2.6.2. Цепочка allowed TCP пакет, следуя с интерфейса $INET_IFACE, попадает в цепочку tcp_packets, если пакет следует на разрешенный порт, то после этого проводится дополнительная проверка в цепочке allowed.Первое правило проверяет, является ли пакет SYN пакетом, т.е. запросом на соединение.


7.2.6.3. Цепочка для TCP

Из книги автора

7.2.6.3. Цепочка для TCP Итак, мы подошли к TCP соединениям. Здесь мы указываем, какие порты могут быть доступны из Internet. Несмотря на то, что даже если пакет прошел проверку здесь, мы все равно все пакеты передаем в цепочку allowed для дополнительной проверки.Я открыл TCP порт с номером


7.2.6.4. Цепочка для UDP

Из книги автора

7.2.6.4. Цепочка для UDP Пакеты UDP из цепочки INPUT следуют в цепочку udp_packets Как и в случае с TCP пакетами, здесь они проверяются на допустимость по номеру порта назначения. Обратите внимание – мы не проверяем исходящий порт пакета, поскольку об этом заботится механизм определения


7.2.6.5. Цепочка для ICMP

Из книги автора

7.2.6.5. Цепочка для ICMP Здесь принимается решение о пропуске ICMP пакетов. Если пакет приходит с eth0 в цепочку INPUT, то далее он перенаправляется в цепочку icmp_packets. В этой цепочке проверяется тип ICMP сообщения. Пропускаются только ICMP Echo Request, TTL equals 0 during transit и TTL equals 0 during reassembly. Все


7.2.7. Цепочка INPUT

Из книги автора

7.2.7. Цепочка INPUT Цепочка INPUT, как я уже писал, для выполнения основной работы использует другие цепочки, за счет чего снижая нагрузку на сетевой фильтр. Эффект применения такого варианта организации правил лучше заметен на медленных машинах, которые в другом случае


7.2.8. Цепочка FORWARD

Из книги автора

7.2.8. Цепочка FORWARD Цепочка FORWARD содержит очень небольшое количество правил. Первое правило напрвляет все TCP пакеты на проверку в цепочку bad_tcp_packets, которая используется так же и в цепочке INPUT. Цепочка bad_tcp_packets сконструирована таким образом, что может вызываться из других


7.2.9. Цепочка OUTPUT

Из книги автора

7.2.9. Цепочка OUTPUT Как я уже упоминал ранее, в моем случае компьютер используется как брандмауэр и одновременно как рабочая станция. Поэтому я позволяю покидать мой хост всему, что имеет исходный адрес $LOCALHOST_IP, $LAN_IP или $STATIC_IP. Сделано это для защиты от трафика, который может


7.2.10. Цепочка PREROUTING таблицы nat

Из книги автора

7.2.10. Цепочка PREROUTING таблицы nat В данном сценарии эта цепочка не имеет ни одного правила и единственно, почему я привожу ее описание здесь, это еще раз напомнить, что в данной цепочке выполняется преобразование сетевых адресов (DNAT) перед тем как пакеты попадут в цепочку INPUT


7.2.11. Запуск SNAT и цепочка POSTROUTING

Из книги автора

7.2.11. Запуск SNAT и цепочка POSTROUTING И заключительный раздел – настройка SNAT. По крайней мере для меня. Прежде всего мы добавляем правило в таблицу nat, в цепочку POSTROUTING, которое производит преобразование исходных адресов всех пакетов, исходящих с интерфейса, подключенного к Internet.


Последовательная RL -цепочка на переменном токе

Из книги автора

Последовательная RL-цепочка на переменном токе Последовательная цепь на рис. 2.1 содержит источник напряжения в 1 В, включенный последовательно с резистором R и катушкой индуктивности L. Последовательная RL-цепочка может служить, например, схемой замещения для реального


Последовательная RC- цепочка на переменном токе

Из книги автора

Последовательная RC-цепочка на переменном токе Заменив в схеме на рис. 2.1 катушку индуктивности конденсатором С, получим следующую схему (рис. 2.3).Значения компонентов в этой схеме: R=5 Ом; С=100 мкФ и f=318 Гц. Рис. 2.3. Схема с последовательной RC-цепочкойВходной файл будет


16.6. Семантика вызовов

Из книги автора

16.6. Семантика вызовов В листинге 15.24 мы привели пример клиента интерфейса дверей, повторно отсылавшего запрос на сервер при прерывании вызова door_call перехватываемым сигналом. Затем мы показали, что при этом процедура сервера вызывается дважды, а не однократно. Потом мы


Цепочка наследования типа Page

Из книги автора

Цепочка наследования типа Page Как вы только что убедились, готовый генерируемый класс, представляющий файл *.aspx, получается из System.Web.UI.Page. Подобно любому базовому классу, этот тип обеспечивает полиморфный интерфейс всем производным типам. Однако тип Page является не


Оптимизация вызовов

Из книги автора

Оптимизация вызовов На уровнях 2 и 3 неизбежно использование явных вызовов процедуры подобных my_polygon.set_size (5) для изменения значения атрибута. Существует опасение, что использование такого стиля на уровне 4 негативно скажется на производительности. Тем не менее компилятор