2012-12-02 54 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

相关问题