2011-03-22 19 views
12

Tengo un programa C++. En algún lugar del programa (difícil de reproducir, pero reproducible), una secuencia da como resultado un ajuste de flotación en un NaN. Como una operación de coma flotante que implica un NaN da como resultado un NaN, esto se propaga rápidamente.Detener el depurador cuando se produce un número de punto flotante NaN

¿Hay alguna manera de configurar el compilador (gcc 4.4) o el debuger (gdb) para detener cuando una operación de punto flotante da como resultado un NaN? Eso sería extremadamente útil.

Gracias! Nathan

PD: Puede ser importante: estoy trabajando con Ubuntu 10.10.

+0

podría permitir excepciones de punto flotante, solo en modo de depuración. Verifique su CRT, no estoy seguro de cómo se hace en el suyo. –

+0

Véase también http://stackoverflow.com/questions/3615724/how-to-trace-a-nan-in-c – Riot

Respuesta

15

Se podría permitir excepciones de punto flotante - ver glibc Control Functions - entonces obtendrá un SIGFPE cuando su valor NaN se produce

+9

feenableexcept (FE_INVALID | FE_OVERFLOW); El truco, gracias! – Nathan

+1

La respuesta es correcta. Sin embargo, en OSX necesita algo como esto http://www-personal.umich.edu/~williams/archive/computation/fe-handling-example.c porque feenableexcept() no está disponible. – fferri

Cuestiones relacionadas