可以使用GDB在Fortran 90中打印派生类型的可分配数组的值吗?

时间:2013-05-08 18:31:50

标签: gdb fortran fortran90 gfortran derived-types

我在Fortran90程序中有以下数据结构:

TYPE derivedType
  CHARACTER(100)     :: name      = ' '
  INTEGER            :: type      = 0
  REAL(KIND(1.0D0))  :: property  = 0.0
END TYPE derivedType

TYPE (derivedType), ALLOCATABLE, DIMENSION(:) :: arrayOfDerivedTypes

当我尝试在GDB中调试和打印值时,如:

(gdb) p arrayOfDerivedTypes(1)%name

我得到非敏感值(通常为零,正斜杠和字母串)或完全错误的值(如arrayOfDerivedTypes(1)%name = 9,当我知道它是= 2时)。如何让GDB打印正确的值?

背景

我知道:

我不想经历编译GDB单独分支的麻烦,以测试是否有人已经知道它不会或者是否有更好的解决方案可以解决这个问题。

我很难想象到目前还没有解决方案。 fortran社区还没有更好的解决方案吗?

2 个答案:

答案 0 :(得分:1)

您使用的是哪个版本的gdb和fortran编译器(gfortran?)? 因为我没有问题

  • gdb - GNU gdb(GDB)红帽企业Linux(7.2-56.el6)
  • gfortran - GNU Fortran(GCC)4.4.6 20120305(Red Hat 4.4.6-4)

这是测试程序:

program test
        implicit none

        TYPE derivedType
                CHARACTER(100)     :: name      = ' '
                INTEGER            :: type      = 0
                REAL(KIND(1.0D0))  :: property  = 0.0
        END TYPE derivedType

        TYPE (derivedType), ALLOCATABLE, DIMENSION(:) :: arrayOfDerivedTypes

        allocate(arrayOfDerivedTypes(10))

        write(6,*) arrayOfDerivedTypes(1)%type

end program test

我将其编译为

gfortran -o test -g -O0 -Wall test.f90

然后启动调试器,设置断点并运行

$ gdb test
(gdb) break test.f90:14
Breakpoint 1 at 0x402c8a: file test.f90, line 14.
(gdb) r
[Thread debugging using libthread_db enabled]

Breakpoint 1, test () at test.f90:14
14              write(6,*) arrayOfDerivedTypes(1)%type
(gdb) p arrayOfDerivedTypes
$3 = (( ' ' <repeats 100 times>, 0, 0 ), ( ' ' <repeats 100 times>, 0, 0 ), ( ' ' <repeats 100 times>, 0, 0 ), ( ' ' <repeats 100 times>, 0, 0 ), ( ' ' <repeats 100 times>, 0, 0 ), ( ' ' <repeats 100 times>, 0, 0 ), ( ' ' <repeats 100 times>, 0, 0 ), ( ' ' <repeats 100 times>, 0, 0 ), ( ' ' <repeats 100 times>, 0, 0 ), ( ' ' <repeats 100 times>, 0, 0 ))
(gdb) p arrayOfDerivedTypes(1)
$4 = ( ' ' <repeats 100 times>, 0, 0 )
(gdb) p arrayOfDerivedTypes(1)%property
$5 = 0
(gdb) p arrayOfDerivedTypes(1)%name
$6 = ' ' <repeats 100 times>

我可以看到一切。

还有http://brulermavie.org/2012/02/how-to-debug-fortran-programs-using-gdb/对我没有帮助,因为我没有看到问题。

答案 1 :(得分:1)

我知道可能会有一些回答,但是Sun工作室(sdb)和intel fortran也带有调试器