Отладка и тестирование приложений в среде Visual Studio 2005. Евсеева О.Н - 23 стр.

UptoLike

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

23
ков охватывающего блока. Напомним, что try-блок может быть вложен в другой
try-блок. Когда же будет исчерпаны списки вложенных блоков, а потенциаль-
ный захватчик не будет найден, то произойдет подъем по стеку вызовов. На
рис. 5 показана цепочка вызовов, начинающаяся с процедуры Main.
Рис. 5. Цепочка вызовов, хранящаяся в стеке вызовов
Исключение возникло в последнем вызванном методе цепочкина ри-
сунке метод r5. Если у этого метода не нашлось обработчиков события, способ-
ных обработать исключение, то это пытается сделать метод r4, вызвавший r5.
Если вызов r5 находится в охраняемом блоке метода r4, то начнет проверяться
список обработчиков в охраняемом блоке метода r4. Этот процесс подъема по
списку вызовов будет продолжаться, пока не будет найден обработчик, способ-
ный захватить исключение, или не будет достигнута начальная точкапроце-
дура Main. Если и в ней нет потенциального захватчика исключения, то срабо-
тает стандартный обработчик, прерывающий выполнение программы с выдачей
соответствующего сообщения.
Параллельная работа обработчиков исключений
Обработчику исключенияcatch-блоку, захватившему исключение, – пе-
редается текущее исключение. Анализируя свойства этого объекта, обработчик
может понять причину, приведшую к возникновению исключительной ситуа-
ции, попытаться ее исправить, и в случае успеха, продолжить вычисления. От-
метим, в принятой C# схеме без возобновления обработчик исключения не воз-
вращает управление try-блоку, а сам пытается решить проблемы. После завер-
шения catch-блока выполняются операторы текущего метода, следующие за
конструкцией try-catch-finally.
Зачастую обработчик исключения не может исправить ситуацию или мо-
жет выполнить это лишь частично, предоставив решение оставшейся части
проблем вызвавшему методупредшественнику в цепочке вызовов. Механизм,
реализующий такую возможность, – это тот же механизм исключений. Как пра-
вило, в конце своей работы обработчик исключения выбрасывает исключение,
выполняя оператор throw. При этом у него есть две возможности: повторно вы-