2011-03-22 59 views
12

我有一個C++程序。程序中的某個地方(難以重現,但可重現),會導致一個浮點數設置爲NaN。由於涉及NaN的浮點操作導致NaN,因此這種擴展速度很快。在生成NaN浮點數時停止調試器

有什麼辦法可以設置編譯器(gcc 4.4)或debuger(gdb)停止浮點操作導致NaN?這將是非常有用的。

謝謝! Nathan

PS:這可能很重要:我在ubuntu linux 10.10下工作。

+0

您可以啓用浮點異常,只是在調試模式。檢查你的CRT,不知道你的CRT是如何完成的。 – 2011-03-22 16:06:14

+0

另請參閱http://stackoverflow.com/questions/3615724/how-to-trace-a-nan-in-c – Riot 2015-10-02 15:33:54

回答

15

您可以啓用浮點異常 - 見glibc Control Functions - 那麼你會得到一個SIGFPE當你NaN值產生

+9

feenableexcept(FE_INVALID | FE_OVERFLOW);訣竅,謝謝! – Nathan 2011-03-22 16:05:52

+1

答案是正確的。但是在OSX上,你需要這樣的東西,因爲feenableexcept()不可用。 – fferri 2014-12-12 21:51:39