Презентация Исключения. Исключительные ситуации онлайн
На нашем сайте вы можете скачать и просмотреть онлайн доклад-презентацию на тему Исключения. Исключительные ситуации абсолютно бесплатно. Урок-презентация на эту тему содержит всего 29 слайдов. Все материалы созданы в программе PowerPoint и имеют формат ppt или же pptx. Материалы и темы для презентаций взяты из открытых источников и загружены их авторами, за качество и достоверность информации в них администрация сайта не отвечает, все права принадлежат их создателям. Если вы нашли то, что искали, отблагодарите авторов - поделитесь ссылкой в социальных сетях, а наш сайт добавьте в закладки.
Презентации » Устройства и комплектующие » Исключения. Исключительные ситуации
Оцените!
Оцените презентацию от 1 до 5 баллов!
- Тип файла:ppt / pptx (powerpoint)
- Всего слайдов:29 слайдов
- Для класса:1,2,3,4,5,6,7,8,9,10,11
- Размер файла:190.14 kB
- Просмотров:49
- Скачиваний:0
- Автор:неизвестен
Слайды и текст к этой презентации:
№2 слайд
![Исключительные ситуации При](/documents_6/1ef8902757fc822739b80447eb5d6ebd/img1.jpg)
Содержание слайда: Исключительные ситуации
При работе программ возникают т.н. исключительные ситуации, когда дальнейшее нормальное выполнение приложения становится невозможным.
Причиной исключительных ситуаций могут быть:
ошибки в программе;
неправильные действия пользователя;
неверные данные и т.д.
Программист должен иметь в своем распоряжении средства для обнаружения и обработки таких ситуаций.
№3 слайд
![Классификация исключительных](/documents_6/1ef8902757fc822739b80447eb5d6ebd/img2.jpg)
Содержание слайда: Классификация исключительных ситуаций
В системе программирования Visual Studio 2008 (2010, 2013) различают два типа исключений:
исключения C++;
системные исключения.
Первый тип исключений генерируется в самой программе инструкцией throw. Второй тип исключений генерируется операционной системой. Такие исключения также называют асинхронными (asynchronous exceptions).
№4 слайд
![Режимы компиляции для работы](/documents_6/1ef8902757fc822739b80447eb5d6ebd/img3.jpg)
Содержание слайда: Режимы компиляции для работы с исключительными ситуациями
Для того чтобы обеспечить перехват исключений C++, необходимо включить режим компиляции /EHsc, а для перехвата исключений любого типа – режим /EHa. Кроме того, для перехвата системных исключений, связанных с обработкой данных с плавающей точкой, следует включить режим /fp:except.
№8 слайд
![Механизм работы защищённого](/documents_6/1ef8902757fc822739b80447eb5d6ebd/img7.jpg)
Содержание слайда: Механизм работы защищённого блока
Выполняются инструкции, входящие в состав блока try (защищенный блок).
Если при их выполнении исключение не возбуждается (в C++ чаще используется термин «выброс исключения»), то блок catch пропускается.
При выбросе исключения выполнение защищенного блока прекращается, и начинают работать инструкции, записанные в блоке catch.
После окончания работы блока catch исключение считается обработанным, и управление передается на первую инструкцию, следующую за конструкцией try …catch.
№9 слайд
![Пример выброса исключения](/documents_6/1ef8902757fc822739b80447eb5d6ebd/img8.jpg)
Содержание слайда: Пример выброса исключения (системные исключения)
int x = 0;
try {
cout <<2/x; // Здесь произойдет выброс исключения
// Последующие операторы выполняться не будут
}
catch (...) {
cout << "Division by zero" << endl;
}
Для корректной работы этого примера необходимо включить режим компиляции /EHa
№11 слайд
![Полный формат защищённого](/documents_6/1ef8902757fc822739b80447eb5d6ebd/img10.jpg)
Содержание слайда: Полный формат защищённого блока
try {операторы_защищенного_блока}
catch-блоки
Catch-блок имеет один из следующих форматов:
catch (тип) {обработчик_исключения}
catch (тип идентификатор) {обработчик_исключения}
catch (...) {обработчик_исключения}
Первый формат используется, если нам надо указать тип перехватываемого исключения, но не нужно обрабатывать связанное с этим исключением значение (это достигается при использовании второго формата оператора catch). Наконец, третий формат оператора catch позволяет обработать все исключения (в том числе и системные).
№13 слайд
![Пример выброса исключения](/documents_6/1ef8902757fc822739b80447eb5d6ebd/img12.jpg)
Содержание слайда: Пример выброса исключения (собственные исключения)
try {
…
throw 0;
//Здесь произойдет выброс исключения
// Последующие операторы выполняться не будут
}
catch (int) {
cout << ”Int type exception was thrown!” << endl;
}
catch (...) {
cout << ”Everything fail!” << endl;
// этот блок не будет работать
}
№14 слайд
![Пример выброса исключения](/documents_6/1ef8902757fc822739b80447eb5d6ebd/img13.jpg)
Содержание слайда: Пример выброса исключения (собственные исключения)
try {
…
throw 0;
//Здесь произойдет выброс исключения
// Последующие операторы выполняться не будут
}
catch (int e) {
cout << ”Int type exception was thrown, code is ” << e << endl;
}
catch (...) {
cout << ”Everything fail!” << endl;
// этот блок не будет работать
}
№15 слайд
![Последовательность действий](/documents_6/1ef8902757fc822739b80447eb5d6ebd/img14.jpg)
Содержание слайда: Последовательность действий при обработке исключений
Создается статическая переменная со значением, заданным в операторе throw. Она будет существовать до тех пор, пока исключение не будет обработано.
Завершается выполнение защищенного try-блока: раскручивается стек подпрограмм, корректно уничтожаются объекты, время жизни которых истекает и т.д.
Выполняется поиск первого из catch-блоков, который пригоден для обработки созданного исключения.
№16 слайд
![Последовательность действий](/documents_6/1ef8902757fc822739b80447eb5d6ebd/img15.jpg)
Содержание слайда: Последовательность действий при обработке исключений (продолжение)
Поиск catch-блоков ведется по следующим критериям:
тип, указанный в catch-блоке, совпадает с типом созданного исключения, или является ссылкой на этот тип;
указатель, заданный в операторе throw, может быть преобразован по стандартным правилам к указателю, заданному в catch-блоке.
в операторе throw задано многоточие.
Если нужный обработчик найден, то ему передается управление и, при необходимости, значение, вычисленное в операторе throw. Оставшиеся catch-блоки игнорируются.
№17 слайд
![Последовательность действий](/documents_6/1ef8902757fc822739b80447eb5d6ebd/img16.jpg)
Содержание слайда: Последовательность действий при обработке исключений (продолжение)
Если ни один из catch-блоков, указанных после защищенного блока, не сработал, то исключение считается необработанным. Его обработка может быть продолжена во внешних блоках try (если они, конечно, есть!).
В конце оператора catch может стоять оператор throw без параметров. В этом случае работа catch-блока считается незавершенной а исключение – не обработанным до конца, и происходит поиск соответствующего обработчика на более высоких уровнях.
№23 слайд
![Необработанное исключение](/documents_6/1ef8902757fc822739b80447eb5d6ebd/img22.jpg)
Содержание слайда: Необработанное исключение
Если оператор throw был вызван вне защищенного блока (что чаще всего случается, когда исключение возбуждается в вызванной функции), или если не был найден ни один подходящий обработчик этого исключения, то вызывается стандартная функция terminate(). Она, в свою очередь, вызывает функцию abort() для завершения работы с приложением.
№24 слайд
![Собственная функция](/documents_6/1ef8902757fc822739b80447eb5d6ebd/img23.jpg)
Содержание слайда: Собственная функция аварийного завершения
Можно зарегистрировать с помощью функции set_terminate свою функцию, которая будет выполняться перед аварийным завершением работы:
void MyTerminate() {
cout << "An error occured!" << endl;
exit(-1);
}
int main ()
{
set_terminate(MyTerminate);
…
throw 0;
}
№25 слайд
![Тонкая обработка системных](/documents_6/1ef8902757fc822739b80447eb5d6ebd/img24.jpg)
Содержание слайда: Тонкая обработка системных исключений
Режим компиляции /EHa позволяет перехватывать и обрабатывать системные исключения, возникающие в процессе работы программы. Однако обработчик таких исключений помещается в блок catch (…) и не дает возможности определить, какое именно исключение возникло.
Для более детальной обработки системных исключений можно воспользоваться механизмом трансляции исключений
№26 слайд
![Трансляция исключений](/documents_6/1ef8902757fc822739b80447eb5d6ebd/img25.jpg)
Содержание слайда: Трансляция исключений
Транслятор исключений – пользовательская callback-функция, прототип которой имеет вид
void MyTranslator(unsigned err_code, _EXCEPTION_POINTERS *p);
Параметр err_code обозначает тип исключительной ситуации (константа EXCEPTION_INT_DIVIDE_BY_ZERO, например, обозначает попытку деления на ноль в целочисленной арифметике, а константа EXCEPTION_ACCESS_VIOLATION – попытку обратиться к запрещенному адресу памяти).
Указатель p содержит адрес структуры, содержащей дополнительную информацию об исключении.
№27 слайд
![Трансляция исключений](/documents_6/1ef8902757fc822739b80447eb5d6ebd/img26.jpg)
Содержание слайда: Трансляция исключений (продолжение)
Написанный транслятор необходимо зарегистрировать вызовом функции
_set_se_translator(MyTranslator);
После этого транслятор получает управление при каждом выбросе системного исключения.
Транслятор – не обработчик исключения!
По завершению его работы выполняется стандартные действия по обработке исключения!
№28 слайд
![Преобразование системных](/documents_6/1ef8902757fc822739b80447eb5d6ebd/img27.jpg)
Содержание слайда: Преобразование системных исключений в пользовательские
void MyTranslator(unsigned err_code, _EXCEPTION_POINTERS *p) {
throw err_code;
}
Теперь в блоке catch(unsigned) можно выполнить более тонкую обработку системных исключений:
int main() {
int x = 0;
int *px = NULL;
_set_se_translator(MyTranslator);
try {
// cout << 2/x;
*px=0;
}
№29 слайд
![Преобразование системных](/documents_6/1ef8902757fc822739b80447eb5d6ebd/img28.jpg)
Содержание слайда: Преобразование системных исключений в пользовательские (продолжение)
catch (unsigned e) {
switch (e) {
case EXCEPTION_INT_DIVIDE_BY_ZERO:
cout << "Division by zero" << endl;
break;
case EXCEPTION_ACCESS_VIOLATION:
cout << "Invalid pointer assignement" << endl;
break;
}
}
return 0;
}
Скачать все slide презентации Исключения. Исключительные ситуации одним архивом:
Похожие презентации
-
Обработка исключительных ситуаций. Исключения. Объекты класса Exception. (Тема 5. 4)
-
Обработка исключительных ситуаций в C
-
Обработка исключительных ситуаций. Подготовка к ОКР
-
Объектно-ориентированное программирование. Исключительные ситуации и их обработка
-
Исключения. Основные моменты
-
Виключні ситуації. Узагальнене програмування на мові Java (Generics)
-
Исключения. Antipatterns. Замена проверки исключением
-
Исключения. Стандартные исключения
-
Исключения. Классы исключений
-
Исключения. Использование исключений