我仍然是调试F77的绿色,并且在数组边界方面存在一些问题。我最近修改了一个冗长的代码以获得新的数组大小。在我注意到改变一个阵列的方法,改变了另一个阵列之前,一切似乎都还可以。在这段代码的某处,我假设,一个赋值超出范围并写入其他数组。
Linux环境中是否有一个调试器/工具可以“捕获”超出范围的异常?
我目前正在使用gfortran
答案 0 :(得分: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]
答案 1 :(得分:1)
如果这是在雇主那里,你可能想让他们购买“燧石”牌照 - 就像C的“lint”,但是对于fortran来说。
另外,gdb / dbx / ddd不进行fortran调试吗?
哦,有时你需要打开f77中的特殊标志,以便在可执行文件和目标文件中维护字符串和调试信息,就像“cc -g”一样。