【问题标题】:Fortran 77 debugger to check array boundsFortran 77 调试器检查数组边界
【发布时间】:2010-07-09 22:16:17
【问题描述】:

我对调试 F77 仍然很陌生,并且在数组边界方面遇到了一些问题。我最近修改了一个冗长的代码以获得新的数组大小。一切“似乎”都还好,直到我注意到改变一个数组的方法,改变了另一个。我假设在这段代码中的某个地方,赋值超出了范围并写入了其他数组。

在 linux 环境中是否有可以“捕获”越界异常的调试器/工具?

我目前正在使用 gfortran

【问题讨论】:

    标签: fortran77 gfortran


    【解决方案1】:

    gfortran 有一个标志可以插入越界检查

    -fbounds-check 启用为数组生成运行时检查 下标和反对声明 最小值和最大值。它也是 检查假定的数组索引和 延迟形状数组对 实际分配的界限。在将来 这也可能包括其他形式的 检查,例如。检查子串 参考文献。

    http://linux.die.net/man/1/gfortran

    输出如你所愿:

    At line 2153 of file src/cdtm0402.f
    Fortran runtime error: Array reference out of bounds for array 'wv1mp', upper bound of dimension 1 exceeded (78 > 77)
    
    Backtrace for this error:
      + function coefdp (0x448BC3)
        at line 2153 of file cdtm0402.f
      + in the main program
        at line 371 of file cdtm0402.f
      + /lib64/libc.so.6(__libc_start_main+0xfd) [0x7ffff703da7d]
    

    【讨论】:

      【解决方案2】:

      如果这是在雇主那里,您可能希望他们为“flint”购买许可证 - 这就像 C 的“lint”,但对于 fortran。

      另外,gdb/dbx/ddd 不做fortran调试吗?

      哦,有时您需要在 f77 中打开特殊标志以维护可执行文件和目标文件中的字符串和调试信息,就像“cc -g”一样。

      【讨论】:

      • 学术设置... gdb/dbx/ddd 可以这样做吗?我不是这些方面的专家。
      • 我已经在编译器上尝试了 -g 标志。不幸的是,帮助了很多人,只是不在数组边界上。
      • 我可以发誓标准调试器允许处理 fortran 的东西。在我将 C 和 fortran 混合在一起的旧工作中,总是 c++ 对象使事情变得混乱。另请注意,f77 可能对调试符号有编译器要求。
      • 我在燧石上找到了一个不错的文档:nas.nasa.gov/News/Techreports/1991/PDF/rnd-91-013.pdf
      • 好的,我再对调试器进行一次调查,看看它是否能提供更多帮助。谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-15
      • 1970-01-01
      • 2010-10-18
      • 2015-08-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多