В нормальных условиях программа ловит и обрабатывает сигнал SIGFPE, но при отладке gdb перехватывает этот сигнал и останавливает выполнение. Как заставить gdb игнорировать определённые сигналы?
А можно поточнее или кусок кода. По умолчанию, SIGFPE приведет к завершению программы, и неважно, в gdb она или нет. Если навешан какой-то обработчик, то он тоже выполнится независимо от того, дебажится программа или нет.
> SIGFPE приведет к завершению программы, и неважно, в gdb она или нет.
почему же, это важно.
get_signal_to_deliver:
if ((current->ptrace & PT_PTRACED) && signr != SIGKILL) {
ptrace_signal_deliver(regs, cookie);
/* Let the debugger run. */
ptrace_stop(signr, signr, info);
только SIGKILL не перехватывается ptrace parent'ом.
Так перехватываются - это понятно, иначе бы всякие strace сигналы не показывали.
Смысл в том, что сигнал по-любому должен достаться обработчику этого сигнала.
А в этом коде сигнал просто доставляется трассировщику (gdb)
Я вот, единственное, что вижу в том же коде это строку:
signr = current->exit_code;
if (signr == 0)
continue;
Может вот тут что-то случилось и сигнал все-таки пролетел?