Debugging 当其他一切都失败时该怎么办

Debugging 当其他一切都失败时该怎么办,debugging,language-agnostic,Debugging,Language Agnostic,我对一份申请有一个棘手的问题。一般来说,它是一个并行的FORTRAN程序,它产生一个并行的C++程序,它具有MPI-2的代码> MPIY-COMYSPONN/功能,在某个点上,它看起来像是一个缓冲区溢出,因为奇怪的变量以更奇怪的值(或移位)结束,或者在使用它的第二或第三次时未初始化。(例如,DO循环中的我的计数器在与耦合数据完全无关的代码部分的迭代之间丢失其值) Valgrind未报告任何内容。电子围栏未报告任何内容。mtrace()不显示任何内容。GNU和英特尔编译器套件都显示相同的问题,但都

我对一份申请有一个棘手的问题。一般来说,它是一个并行的FORTRAN程序,它产生一个并行的C++程序,它具有MPI-2的代码> MPIY-COMYSPONN/<代码>功能,在某个点上,它看起来像是一个缓冲区溢出,因为奇怪的变量以更奇怪的值(或移位)结束,或者在使用它的第二或第三次时未初始化。(例如,
DO
循环中的我的计数器在与耦合数据完全无关的代码部分的迭代之间丢失其值)

Valgrind未报告任何内容。电子围栏未报告任何内容。
mtrace()
不显示任何内容。GNU和英特尔编译器套件都显示相同的问题,但都无法捕获原因或位置。优化和调试显示不同的问题。mpich和OpenMPI都显示相同的问题。gdb、idb和英特尔Inspector不捕获任何内容。添加打印语句会更改崩溃位置,但仍然会发生

每个单元测试和验证测试都独立地通过每个程序。问题似乎在于它们之间的交互。但我使用过的任何工具都不能告诉我为什么或在哪里


我完全不知所措。当你知道的每一个工具和技巧都失败时,你会怎么做?还有其他工具我可能错过了吗?我要把它全部核掉,然后重新开始,希望这是第二次,不要犯任何错误。

你唯一能做的就是从一个最小的工作集开始添加,直到它崩溃为止-或者有时候,如果你真的很幸运,通过一条稍微不同的路径获得最终的结果


或者你可以转向喝酒

我特别不走运——我把所有的程序都注释掉了,除了我添加的那些,一切都很好。所以我开始取消注释,3-4次都过去了,一切都还不错。我取消了第5次注释,现在它在第2次中抛出了一个错误。但是第5次完全是空的,没有任何作用。7天的狩猎这件事!我不想让你泄气,但我想我应该重新开始。