2012-07-26 46 views
2

我想弄清楚如何找到我用C編寫的模擬代碼生成NaN的確切位置。 我使用普通C89(但我可以移動到C99/C11)和Debian擠壓gcc 4.4.5。使用valgrind的C程序的浮點陷阱

顯然valgrind有一個patch應該能夠執行此檢查。不幸的是,它不包含在Debian發佈的二進制文件中。 確實,試圖編譯香草valgrind加上exp-floattrap也不起作用(它似乎沒有包含在最終的可執行文件中)。

你有沒有繼續尋找在C源這些類型的錯誤的起源?

感謝您的幫助。

回答

2

我承認我根本不使用valgrind,只是因爲我不需要它,但是如果你只想找到一個變量被設置爲NaN的情況,你能不能使用GDB(或類似),併成立了一個觀察點像變量:

watch var==NaN 

這可以讓你知道在那一個變量變成NaN,如果不是有罪的操作本身什麼時候,但一回價值觀,你將自己的一個功能放在罪惡鏈上,並在該功能中設置一個觀察點,等等等等,直到你看到錯誤。

我希望這有點幫助:)

+2

好吧,它的工作原理,但使用'watch var!= var'。 – Alberto 2012-07-27 17:45:04