2010-07-08 79 views
1

我仍然是绿色的调试F77和我有一些数组边界问题。我最近修改了冗长的代码以获得新的数组大小。在我注意到方法改变一个数组,改变另一个数组之前,一切似乎都没有问题。我认为,在这段代码中,一个赋值超出范围并写入其他数组。Fortran 77调试器来检查数组边界

在Linux环境中是否有一个调试器/工具会'捕捉'超出界限异常?

我目前使用gfortran

回答

2

没有为gfortran插入检查出界

的标记-fbounds检查数组 标和针对申报 最小值和最大值启用生成的运行时检查。它也 检查假设的数组索引和 延期的形状数组与 实际分配的边界。在未来 这也可能包括其他形式的 检查,例如。检查子字符串 参考。

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

如果这是一个雇主,你可能希望他们购买的许可证“燧石” - 就像“皮棉”为C,但对于FORTRAN。

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

呵呵,有时你需要在f77中打开特殊的标志来保存可执行文件和目标文件中的字符串和调试信息,就像“cc -g”一样。

+0

学术环境...可以GDB/DBX/DDD做到这一点?我不是这些人的专业人士。 – ccook 2010-07-08 19:51:45

+0

我已经在编译器上试过了-g标志。不幸的是,这帮助了一大堆,而不是数组边界。 – ccook 2010-07-08 19:53:34

+0

我可以发誓标准的调试器允许在Fortran上工作。在C和Fortran混合在一起的旧工作中,总是让C++对象困惑。另请注意,f77可能对调试符号有编译器要求。 – eruciform 2010-07-08 19:54:05