2012-12-02 56 views
0

我有一個令人討厭的Heisenbug與應用程序。一般而言,它是一個並行Fortran程序,它產生一個具有MPI-2功能的並行C++程序,並且在某些情況下,它看起來像是某個緩衝區溢出,因爲奇怪的變量最終會導致更奇怪的(即移位)值或未初始化第二次或第三次使用它(例如,我的DO循環中的計數器在與耦合數據完全無關的代碼部分中的迭代之間丟失了它的值)。當所有其他都失敗時該怎麼辦

Valgrind什麼也沒有報告。電柵欄不報告。 mtrace()什麼也沒有顯示。 GNU和英特爾編譯器套件都顯示相同的問題,但都無法捕捉到原因或地點。優化和調試顯示不同的問題。 mpich和OpenMPI都顯示相同的問題。 gdb,idb和Intel Inspector沒有任何東西。添加打印語句會導致崩潰更改位置,但仍然會發生。

每個單元測試和驗證測試獨立傳遞每個程序。這是他們之間的互動似乎是問題。但是我用過的工具可以給我任何跡象表明爲什麼或者在哪裏。

我處於完全喪失狀態。當你知道每一個工具和技巧都失敗時,你會做什麼?我可能錯過了其他任何工具嗎?我即將把它們全部打開並重新開始,希望我不會再犯這種錯誤。

回答

1

,你唯一可以做的事情就是從最小工作集開始,並添加到它打破 - 有時,如果你真的很幸運,通過一個稍微不同的路徑

另外,您可以獲取到最終需要的結果轉身喝酒

+0

我特別不走運 - 除了我添加的所有例程外,我注意到了所有的例程,一切都很好。所以我開始取消註釋,並且3-4過去並且一切都還好。我取消了第5個的註釋,現在它在第2箇中出現了錯誤。但是第五個完全是空的,它什麼都不做。這個東西狩獵7天! – tpg2114

+0

我不想讓你灰心,但我想我會重新開始。 – WaywiserTundish

相關問題