3
我是Linux下gdb的初学者。 当我尝试调试用ifort和-c,-g选项编译的程序时,我想检查几个数组的绑定。 不幸的是,我无法在Google中找到任何有关如何使用gdb调试器打印数组的信息。如何使用gdb为Fortran程序打印数组大小(边界)
[更新]
我有分配的,公共阵列,其在从该模块的子程序正确分配的模块。 在主程序中(调用子程序之后),我尝试使用whatis
并参见(*,*)
而不是形状。
我是Linux下gdb的初学者。 当我尝试调试用ifort和-c,-g选项编译的程序时,我想检查几个数组的绑定。 不幸的是,我无法在Google中找到任何有关如何使用gdb调试器打印数组的信息。如何使用gdb为Fortran程序打印数组大小(边界)
[更新]
我有分配的,公共阵列,其在从该模块的子程序正确分配的模块。 在主程序中(调用子程序之后),我尝试使用whatis
并参见(*,*)
而不是形状。
可以使用whatis命令查看数组边界:例如,
program arr
real, dimension(2:41) :: arr1
real, allocatable, dimension(:), target :: arr2
integer :: i
allocate(arr2(40))
forall(i = 2:41) arr1(i) = i
arr2 = arr1 + 2
print *, arr1(2)
deallocate(arr2)
end program are
运行提供了
$ gfortran -g foo.f90
$ gdb a.out
[...]
(gdb) break 11
Breakpoint 1 at 0x400b01: file foo.f90, line 11.
(gdb) run
[...]
Breakpoint 1, arr() at foo.f90:11
11 print *, arr1(2)
(gdb) whatis arr1
type = real(kind=4) (2:41)
(gdb) whatis arr2
type = real(kind=4) (40)
我要指出的是,上面还与ifort,唯一的区别是略有不同在输出中进行格式化:'type = REAL(4)(2:41)'等 – 2014-10-07 17:23:54
非常感谢您的帮助!但是可分配的公共数组呢?我已经在一个主程序中尝试了whatis命令,将数组定义为可从模块调用的例程中作为allocatable public。我刚刚看到(*,*)尺寸... – 2014-10-10 09:21:45
@KonstantinEbauer,你能给出一个代码示例吗?数组是否已分配? – 2014-10-10 20:26:55