Остановка отладчика при создании числа с плавающей запятой NaN без изменения кода

Я читаю этот а также этот. Квинтэссенция заключается в том, что можно генерировать SIGFPE, если создается Nan, включив fenv.h и включив все исключения с плавающей запятой, кроме FE_INEXACT от feenableexcept(FE_ALL_EXCEPT & ~FE_INEXACT);

Таким образом, код меняет форму

int main () {
double dirty = 0.0;
double nanvalue = 0.0/dirty;
return 0;
}

в

 #include <fenv.h>
int main () {
feenableexcept(FE_ALL_EXCEPT & ~FE_INEXACT);  // Enable all floating point exceptions but FE_INEXACT
double dirty = 0.0;
double nanvalue = 0.0/dirty;
return 0;
}

Это прекрасно работает, но вы должны изменить код. У меня проблема в том, что в огромной кодовой базе c и c ++ где-то создается nan, и я не знаю где. Это не вариант применить вышеупомянутое изменение к файлам и
отследить ошибку.

Есть ли способ включить все исключения с плавающей запятой, БЕЗ изменения кода? Есть ли опция компиляции, о которой я не знаю?

Мы используем компилятор intel icc версии 15.0.3.

6

Решение

Независимо от того, сколько файлов охватывает ваш код, вам нужно только добавить feenableexcept(FE_ALL_EXCEPT & ~FE_INEXACT) один раз только в первой строке вашего main() функция.

Он будет включать исключения для всей вашей программы, пока вы не отключите исключения, вызвав другую функцию, такую ​​как fedisableexcept(),

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]