【发布时间】:2010-07-09 22:16:17
【问题描述】:
我对调试 F77 仍然很陌生,并且在数组边界方面遇到了一些问题。我最近修改了一个冗长的代码以获得新的数组大小。一切“似乎”都还好,直到我注意到改变一个数组的方法,改变了另一个。我假设在这段代码中的某个地方,赋值超出了范围并写入了其他数组。
在 linux 环境中是否有可以“捕获”越界异常的调试器/工具?
我目前正在使用 gfortran
【问题讨论】:
我对调试 F77 仍然很陌生,并且在数组边界方面遇到了一些问题。我最近修改了一个冗长的代码以获得新的数组大小。一切“似乎”都还好,直到我注意到改变一个数组的方法,改变了另一个。我假设在这段代码中的某个地方,赋值超出了范围并写入了其他数组。
在 linux 环境中是否有可以“捕获”越界异常的调试器/工具?
我目前正在使用 gfortran
【问题讨论】:
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]
【讨论】:
如果这是在雇主那里,您可能希望他们为“flint”购买许可证 - 这就像 C 的“lint”,但对于 fortran。
另外,gdb/dbx/ddd 不做fortran调试吗?
哦,有时您需要在 f77 中打开特殊标志以维护可执行文件和目标文件中的字符串和调试信息,就像“cc -g”一样。
【讨论】: