Привет, я пытаюсь протестировать код, чтобы узнать, предназначен ли он для решения проблем памяти.
К сожалению, я должен сделать это с помощью c-блока, который очень плохо справляется с сегментационными ошибками (просто выходит из строя)
Итак, мой вопрос: могу ли я добавить обработчик сигнала в код, который я тестирую, чтобы он мог выйти оскорбительной функции вместо выхода из всей программы?как выйти из функции, которая вызывает segfault и вернуться к вызывающей функции
По существу, можно ли изменить следующий обработчик для выхода из функции и возврата к моей структуре cunit?
void sighandler(int signo, siginfo_t *si, ucontext_t* context)
{
printf("Handler executed for signal %d\n", signo);
exit(0); /* can i replace this with exit from function? */
}
Вы, вероятно, не хотите ловить 'SIGSEGV' в первую очередь.Исправьте или отключите данный тест, пока он не будет исправлен. – devnull
Фактически я вызываю функцию без инициализации памяти, чтобы проверить, проверяет ли она недопустимые входы, но функции seg_faults и аварийно завершает всю программу, которая включает в себя мою модульную систему тестирования. – Venkat
Посмотрите на setjmp/longjmp. См. 'Man longjmp'. Вот подробности, связанные с их использованием в обработчиках сигналов: http://www.gnu.org/software/libc/manual/html_node/Longjmp-in-Handler.html –