LINUX.ORG.RU

исключения в С++


0

0

имеется проблема - segfault-титься прога при вызове определённой функции (которая находится в libkio). как правильно поймать это исключение и продолжить дальше выполнение ?

try{
    copyTo(path); // сдесь происходит фатальная ошибка
}catch(const char *message)
  {
    		printf("caught message : \"%s\"", message);
  }

    
не помогает - программа вылетает. Можно ли нормально обработать это исключение ?

любое исключение можно поймать catch( ... )

но сегфолт не порождает никаких исключений. сегфолт обычно порождает сигнал 11

dilmah ★★★★★
()

Вот тестовая программка:

int main(int argc, char *argv[]) 
{ 
    try 
    { 
        int *i = 0; cout << *i << endl; 
    } 
    catch ( ... ) 
    { 
        cout << "Exception!" << endl; 
    } 
}

Если ещё перехватывать сигналы, оказывается, 
что сигнал SIGSEGV приходит раньше любого 
исключения. То же самое с SIGABRT. Досадно, 
что приходится держать два разных механизма 
перехвата исключительных ситуаций (ведь сигналы, 
как ни крути, исключительная ситуация).

hbee ★★★★
()
Ответ на: комментарий от CKulT

man 7 signal

сигнал 11-ть можно перехватить, и что-то после него делать.

Только ты уверен, что тебе это надо, если например происходит segmentation fault, то не стоит ли испраить программу, а не пытаться ехать на машине со спущенным колесом?

И сигналы - это UNIX API, никак не связанный с исключениями C++. И по сигналу, насколько я знаю, ты не сможешь сгенерить исключение - если кто знает, как, то будет интересно узнать :)

Spectr ★★★
()
Ответ на: комментарий от hbee

Ну, механизм исключений C++ не поддерживает по стандарту сигналы POSIX как исключения по стандарту C++...

Spectr ★★★
()
Ответ на: комментарий от Spectr

всё это я знаю, просто никогда после отлова 11 сигнала я ещё не продолжал выполнение - просто выдавал мессагу об том и выходил из программы.
Насчёт исправить программу - эта баг класса KArchive в libkio, который не чекает архив на целостность+метод сжатия, таким образом на неизвестных типах сжатия он банально сегфолтиться :(
Вообщем, спасибо - будем копать ))

CKulT
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.