Debugging 未附加调试程序的错误

Debugging 未附加调试程序的错误,debugging,fortran,fortran90,Debugging,Fortran,Fortran90,我正在使用英特尔的FORTRAN编译器编译一个数字库。测试用例在libc.so.6中提供了错误。当我连接Intel的调试器(IDB)时,应用程序将成功运行。在调试器阻止错误的情况下,如何调试错误?请注意,gfortran也出现了同样的错误 我在OpenSUSE 11.2 x64中工作 错误是: forrtl:severe(408):fort:(3):数组B的下标#1的值为-534829264,小于1的下限。错误消息对我来说非常清楚,您试图访问数组中不存在的元素。我怀疑值-534829264在使用

我正在使用英特尔的FORTRAN编译器编译一个数字库。测试用例在libc.so.6中提供了错误。当我连接Intel的调试器(IDB)时,应用程序将成功运行。在调试器阻止错误的情况下,如何调试错误?请注意,gfortran也出现了同样的错误

我在OpenSUSE 11.2 x64中工作

错误是:


forrtl:severe(408):fort:(3):数组B的下标#1的值为-534829264,小于1的下限。错误消息对我来说非常清楚,您试图访问数组中不存在的元素。我怀疑值-534829264在使用未初始化的变量标识数组中的元素时是垃圾,或者是整数算术溢出的结果。无论哪种方式,您都应该打开编译标志以强制进行数组边界检查并运行一些测试。我认为英特尔编译器的标志应该是
-CB
,但请查看文档

至于为什么程序显然在调试器中成功运行,我帮不了多少忙,但也许调试器在变量上强加了一些默认值,而运行时系统本身却没有。或者其他一些因素完全是罪魁祸首

编辑:

运行时系统没有告诉您是哪行代码导致了问题吗?还有一些事情可以尝试诊断问题。使用编译器警告您

  • 在初始化变量之前使用变量
  • 整数算术溢出(不确定编译器是否能发现这一点?)
  • 同一类型中从一种类型到另一种类型以及从一种类型到另一种类型的强制转换

此外,请检查默认整数大小是否符合您的预期,更重要的是,是否符合代码其余部分的预期。

不是该领域的专家,但需要考虑以下几点:

1) 调试器是否首先将用作索引的变量初始化为零,但非调试变量不初始化,因此该变量以“垃圾”值开始(使用旧版本的Pascal来执行此操作)


2) 你在使用线程吗?如果是这样,调试会改变执行顺序,以便某些准备线程能够及时完成。

谢谢。有没有找到电话来源的提示?很抱歉,我被Visual Studio宠坏了。感谢您提供的提示,不过这是一个已发布的库(FISHPACK)。我得到的错误没有源信息。我得到了如下结果:tblktri 0000000000 4A6AED Unknown tblktri 0000000000 4A55F5 Unknown libc.so.6 00007FAD079D6A7D Unknown Unknown TANKS标记。我就是这么做的。我也在使用他们的测试用例,所以他们所有的代码。我仔细阅读了代码,发现其中一种方法的索引计算似乎有错误。我不确定这是否只是因为我使用的编译器不同于他们使用的编译器。我把我的发现通过电子邮件发给了作者。谢谢你的帮助!您使用的是FISHPACK还是FISHPACK90?对于Fortran 90版本,编译器可能能够检查调用中参数的数量和类型是否正确——这可能会出错。我尝试了这两种方法。我在F77版本中得到了不准确的结果,并且在F90版本中出现了错误。谢谢你的分数。幸运的是,我没有使用线程。