1

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

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

我目前正在使用 gfortran

4

2 回答 2

2

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]
于 2010-07-09T14:16:17.653 回答
1

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

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

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

于 2010-07-08T19:50:39.107 回答