我有一个讨厌的Heisenbug和一个应用程序。一般来说,它是一个并行的Fortran程序,它产生了一个具有MPI-2的MPI_Comm_Spawn功能的并行C++程序,在某种程度上,它看起来像是某个地方的缓冲区溢出了,因为奇怪的变量以更奇怪的(即.值或在第二次或第三次使用时变得未初始化(例如,DO循环中的计数器在与来自耦合的数据完全无关的部分代码中,在两次迭代之间丢失其值)。
Valgrind没有任何报告。电栅栏没有报告。mtrace()不显示任何内容。GNU和Intel编译器套件都显示了相同的问题,但两者都无法捕获原因和位置。优化和调试显示了不同的问题。mpich和OpenMPI都显示出同样的问题。gdb、idb和Intel Inspector没有捕获任何内容。添加print语句会使崩溃的位置发生变化,但它仍然会发生。
每个单元测试和验证测试都独立地通过每个程序。它们之间的交互似乎是问题所在。但是我用过的任何工具都不能告诉我为什么或者在哪里。
我完全不知所措。当你所知道的每一个工具和技巧都失败时,你到底做了什么?还有没有其他我可能遗漏的工具?我准备把它全部销毁,然后重新开始,希望我不会再犯第二次的错误。
发布于 2012-12-02 11:14:39
您唯一可以做的就是从最小工作集开始,然后添加,直到它被打破-或者,如果您真的很幸运,有时会通过稍微不同的路径获得最终所需的结果
或者,你可以转向饮酒。
https://stackoverflow.com/questions/13666032
复制相似问题