Обработка исключений

Модератор: Модераторы разделов

MiK13
Сообщения: 1270
ОС: Linux Debian

Re: Обработка исключений

Сообщение MiK13 »

gmorgunov писал(а):
05.06.2008 12:05
Так и есть, но прерывания перехватываются.

По-моему, любые прерывания обрабатываются сначала кодом операционной системы, а потом она уже может вызвать дополнительный обработчик заданный приложением.
gmorgunov писал(а):
05.06.2008 12:05
Как вам это:
filter.cc

Код: Выделить всё

#include <signal.h>
#include <iostream>
using namespace std;

char enter[10];

void my(int snum)                                      // ф-ия обработчик сигнала
{                                                      // сигнал получен через структуру sigaction act
      cout << "поймал   сигнал N:" << snum << endl;

      cout << "продолжать?    y/n" << endl;
      gets(enter);

      if ( (enter[0]=='y') || (enter[0]=='Y') )
         system("./filter");                           // повторный вызов приложения
      else
         system("/bin/bash");                          // выход из приложения
}
   ...
}

Не понял -- зачем запускать ещё одну копию програииы, причём через system ?
А system("/bin/bash"); -- это, по-моему, вообще не выход из программы, а запуск ещё одного интерпретатора. Почему не exit(CODE);?
Спасибо сказали:
gmorgunov
Сообщения: 27
ОС: linux mandriva2007

Re: Обработка исключений

Сообщение gmorgunov »

MiK13
Я хотел показать, что сообщ. - segmetation fault не будет. Если вы сделаете exit(), _exit, _Exit() - то вы выйдете из приложения (см. начало темы - крах приложения). Полностью корректного обработчика SIGSEGV ... с возвратом в главное меню приложения, я пока не нашел. Но он существует. Нужен рабочий код, иллюстрирующий это.(для Linux). В Win. есть такой механизм - SEH.
Спасибо сказали:
navrocky
Сообщения: 2
ОС: opensuse 11.1

Re: Обработка исключений

Сообщение navrocky »

Silver писал(а):
26.05.2008 07:57
Пишу программу на C++ в Linux. Необходимо обрабатывать исключения типа выход за область памяти, причем не падая с сообщением Segmentation Fault. Такое событие удается отловить с помощью сигнала SIGSEGV. Но что делать дальше с приложением чтобы оно восстановило работу? Кто что посоветует? Не жду легких решений, но и ответов типа это не возможно тоже не надо, т.к. все таки это как то делают.


Если еще не поздно, то вот - статья.

Думаю и остальным будет полезно. ;)
Спасибо сказали:
navrocky
Сообщения: 2
ОС: opensuse 11.1

Re: Обработка исключений

Сообщение navrocky »

OCTAGRAM писал(а):
26.05.2008 16:25
libsigsegv?


Не поможет, это просто кроссплатформенная обертка над sigaction, не более. Тоже в обработчике кидаешь исключение и программа завершается.
Спасибо сказали: