2014-10-07 19 views
3

我是Linux下gdb的初学者。 当我尝试调试用ifort和-c,-g选项编译的程序时,我想检查几个数组的绑定。 不幸的是,我无法在Google中找到任何有关如何使用gdb调试器打印数组的信息。如何使用gdb为Fortran程序打印数组大小(边界)

[更新]

我有分配的,公共阵列,其在从该模块的子程序正确分配的模块。 在主程序中(调用子程序之后),我尝试使用whatis并参见(*,*)而不是形状。

回答

5

可以使用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) 
+0

我要指出的是,上面还与ifort,唯一的区别是略有不同在输出中进行格式化:'type = REAL(4)(2:41)'等 – 2014-10-07 17:23:54

+0

非常感谢您的帮助!但是可分配的公共数组呢?我已经在一个主程序中尝试了whatis命令,将数组定义为可从模块调用的例程中作为allocatable public。我刚刚看到(*,*)尺寸... – 2014-10-10 09:21:45

+0

@KonstantinEbauer,你能给出一个代码示例吗?数组是否已分配? – 2014-10-10 20:26:55