2017-02-23 57 views
0

我正在使用Code :: Blocks編譯gfortran的一些數字代碼。我有兩個版本的可執行文件:Debug和Release。爲什麼gfortran/gdb在調試時產生不同的數字結果?

  • 調試編譯標誌:-Jobj\Debug\ -Wall -g -c
  • 版本的編譯選項:-Jobj\Release\ -Wall -O2 -c
  • GDB invokation標誌:-nx -fullname -quiet -args

當我正常運行的代碼,無論是發佈和調試可執行文件產生相同的輸出。但是,當我運行代碼gdb時,輸出是不同的。這似乎是由於數值計算在執行過程中產生了不同的結果。

例如,當在gdb運行一個計算的結果是7.93941842553643E-06和正常運行時是1.71006041855278E-03。更奇怪的是,一些非零結果在雙精度精度內是相同的。

我怎麼能保證輸出是一樣的,當我運行使用gdb?使用gdb時,默認使用的是不同類型的數值計算或評估?

+0

您必須刪除您的錯誤和未定義的行爲。哪個?誰知道沒有看到你的代碼... –

+0

我編輯了原始問題,以反映這一事實,我相信我看到的行爲是由於在使用gdb運行代碼時計算數值的方式有所不同。 –

+0

那麼計算如何呢? –

回答

1

這似乎是由於生產過程中執行不同的結果的數值計算。

也就是說非常不大可能:GDB不參加你的程序執行的任何數值計算。

明顯更可能的是,你的程序使用未初始化的內存,並且內存恰好在程序GDB下運行有不同的值。

如果你在一個受valgrind支持的平臺上,你的第一步應該是在它下面運行你的程序,並修復它找到的所有錯誤。

相關問題