[英]Stopping the debugger when a NaN floating point number is produced without a code change
我讀到這個和這個 。 精髓是,如果一個南由包括fenv.h並啟用所有浮點異常,但所產生的一個可以拋出SIGFPE 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,我不知道在哪里。 將上述更改應用於文件的hunderts並跟蹤錯誤不是一種選擇。
有沒有辦法在沒有代碼更改的情況下啟用所有浮點異常? 有沒有我不知道的編譯選項?
我們使用intel icc 15.0.3版編譯器。
無論你的代碼有多少文件跨越,你只需要添加feenableexcept(FE_ALL_EXCEPT & ~FE_INEXACT)
只有一次 ,你的第一行main()
函數。
它將啟用整個程序的異常,直到通過調用另一個函數(如fedisableexcept()
禁用異常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.