如何使用gdb for Fortran程序打印数组大小(绑定)

如何使用gdb for Fortran程序打印数组大小(绑定),gdb,fortran,intel-fortran,Gdb,Fortran,Intel Fortran,我是Linux下gdb的初学者。 当我尝试调试使用ifort和-c,-g选项编译的程序时,我想检查几个数组的界限。 不幸的是,我在Google中找不到任何关于如何打印绑定了gdb调试器的数组的信息 [更新] 我有一个带有可分配公共数组的模块,它在这个模块的子例程中被正确分配。 在主程序中(调用子例程后),我尝试使用whatis,并查看(*,*),而不是形状。您可以使用命令查看数组边界:例如 program arr real, dimension(2:41) :: arr1 real, a

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

[更新]

我有一个带有可分配公共数组的模块,它在这个模块的子例程中被正确分配。 在主程序中(调用子例程后),我尝试使用
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)
,等等。非常感谢您的帮助!但可分配的公共阵列呢?我在一个主程序中尝试了whatis命令,在一个模块调用的例程中,数组被定义为可分配公共。我刚刚看到(,)维…@KonstantinEbauer,你能给出一个代码示例吗?阵列是否已分配?如何使用ifort进行分配?请提供一些指导,谢谢。。。