я пытался увидеть, если сигнал левши SIGSEGV может помочь справиться с необработанным исключением C++, я экспериментирую его:Почему обработчик сигналов для SIGSEGV не поймает мое исключение C++ throw?
#include <stdio.h>
#include <execinfo.h>
#include <signal.h>
#include <stdlib.h>
#include <unistd.h>
void handler(int sig) {
void *array[10];
size_t size = backtrace(array, 10);
fprintf(stderr, "Error: signal %d:\n", sig);
backtrace_symbols_fd(array, size, STDERR_FILENO);
exit(1);
}
int main()
{
signal(SIGSEGV, handler);
throw 1;
}
$ г ++ -g h.cpp -rdynamic & & ./a.out
Terminate называется кинув экземпляр «межда» Прерванных (дампа ядра)
Ну, программа не печатает аварию стеки вызовов как я и ожидал. Мой вопрос:
До тех пор, пока он заканчивается, выполняет ли он какие-либо сигналы, такие как SIGSEGV? Есть ли системный вызов или posix api, который мог бы поймать даже исключения C++ и распечатывать стек вызовов?
Спасибо!
броска дозы улова с 'уловом (...)' –
Возможный дубликат [ C++ трассировка стека из необработанного исключения?] (http://stackoverflow.com/questions/3355683/c-stack-trace-from-unhandled-exception) + исключение не является нарушением сегментации (ошибка сегментации). – user1810087
Почему вы ожидаете, что обработчик сигнала поймает это? – juanchopanza