Since you mention using gdb, here's a solution that works with gcc -- you want the
functions defined in 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
",dirty,nanval);
}
Running the above program produces the output "Floating point exception". Without
the call to feenableexcept
, the "Succeeded!" message is printed.
If you were to write a signal handler for SIGFPE
, that might be a good place to
set a breakpoint and get the traceback you want. (Disclaimer: haven't tried it!)
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…