簡體   English   中英

在沒有代碼更改的情況下生成NaN浮點數時停止調試器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM