Основы программирования в Win32API. Марапулец Ю.В. - 111 стр.

UptoLike

Составители: 

В Visual C++ реализован кадровый механизм обработки исключений [2].
Это означает, что каждый блок catch связан через стек с процедурой,
в которой он содержится. Термин кадр обозначает блок программного стека.
Каждый раз, когда программа вызывает процедуру, она записывает в стек но-
вый набор информации. Эта информация включает, в частности, параметры,
переданные новой процедуре, а также адрес точки, в которую необходимо
вернуть управление по завершении процедуры. Если вторая процедура вызы-
вает третью, а третьячетвертую и т. д., то при каждом последующем вызове
в стек записывается новая информация (рис. 8.1).
Каждый кадр представляет вызванную процедуру, которая, прежде чем
возобновить свое выполнение, ожидает выполнения вложенных подпрограмм.
В любой момент с помощью стека можно проследить, в какой последователь-
ности происходил вызов процедур. При генерации исключения система после-
довательно возвращается назад и ищет обработчики исключений во всех при-
остановленных процедурах.
Рис. 8.1. Кадры в стеке программы
Встроенный механизм обработки исключений изменяется в зависимости
от конкретной системы. Например, MIPS-компьютеры реализуют обработчики
исключений посредством специальной таблицы, а не стека.
При порождении исключения система прежде всего сохраняет аппарат-
ный контекст прерванного потока, подобно тому, как это делается при пере-
ключении контекста для реализации обычной многозадачности. В зависимости
от того, каким образом производится окончательная обработка исключения,
система впоследствии может использовать записанный контекст или возобно-
вить выполнение программы с той строки, которая породила исключение.
В ответ на исключение система обычно пытается сначала запустить
111
     В Visual C++ реализован кадровый механизм обработки исключений [2].
Это означает, что каждый блок catch связан через стек с процедурой,
в которой он содержится. Термин кадр обозначает блок программного стека.
Каждый раз, когда программа вызывает процедуру, она записывает в стек но-
вый набор информации. Эта информация включает, в частности, параметры,
переданные новой процедуре, а также адрес точки, в которую необходимо
вернуть управление по завершении процедуры. Если вторая процедура вызы-
вает третью, а третья – четвертую и т. д., то при каждом последующем вызове
в стек записывается новая информация (рис. 8.1).
     Каждый кадр представляет вызванную процедуру, которая, прежде чем
возобновить свое выполнение, ожидает выполнения вложенных подпрограмм.
В любой момент с помощью стека можно проследить, в какой последователь-
ности происходил вызов процедур. При генерации исключения система после-
довательно возвращается назад и ищет обработчики исключений во всех при-
остановленных процедурах.




                       Рис. 8.1. Кадры в стеке программы

     Встроенный механизм обработки исключений изменяется в зависимости
от конкретной системы. Например, MIPS-компьютеры реализуют обработчики
исключений посредством специальной таблицы, а не стека.
     При порождении исключения система прежде всего сохраняет аппарат-
ный контекст прерванного потока, подобно тому, как это делается при пере-
ключении контекста для реализации обычной многозадачности. В зависимости
от того, каким образом производится окончательная обработка исключения,
система впоследствии может использовать записанный контекст или возобно-
вить выполнение программы с той строки, которая породила исключение.
     В ответ на исключение система обычно пытается сначала запустить

                                     111