Поскольку вы упоминаете об использовании GDB, вот решение, которое работает с GCC - вы хотите
функции, определенные в fenv.h
:
#define _GNU_SOURCE
#include <fenv.h>
#include <stdio.h>
int main(int argc, char **argv)
{
double dirty = 0.0;
feenableexcept(FE_ALL_EXCEPT & ~FE_INEXACT); // Enable all floating point exceptions but FE_INEXACT
double nanval=0.0/dirty;
printf("Succeeded! dirty=%lf, nanval=%lf\n",dirty,nanval);
}
Запуск вышеуказанной программы приводит к выводу «Исключение с плавающей запятой». Без
вызов feenableexcept
, "Успешно!" сообщение распечатано.
Если бы вы написали обработчик сигнала для SIGFPE
, это было бы хорошим местом для
установить точку останова и получить желаемую трассировку. (Отказ от ответственности: не пробовал!)