Can GDB be used to print values of allocatable arrays of a derived type in Fortran 90? [duplicate]
Asked Answered
R

2

6

I have the following data structure in a Fortran90 program:

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

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

When I try to debug and print values in GDB like:

(gdb) p arrayOfDerivedTypes(1)%name

I get non-sensical values (often strings of zeros, forward slashes and letters), or completely wrong values (like arrayOfDerivedTypes(1)%name = 9, when I know that it is = 2). How can I get GDB to print the correct values?

Background

I am aware of:

I don't want to go through the trouble of compiling a separate branch of GDB to test if it solves this problem if someone already knows that it won't or if there is a better solution available.

I have a hard time imagining that there is not a solution to this yet. Does the fortran community not have a better solution for a free debugger yet?

Robyn answered 8/5, 2013 at 18:31 Comment(0)
D
1

Which version of gdb and fortran compiler (gfortran?) are you using? As I have no problems with

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

Here's the test program:

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

And I compile it as

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

Then start up the debugger, set a breakpoint and run

$ 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>

I can see everything.

There is also http://brulermavie.org/2012/02/how-to-debug-fortran-programs-using-gdb/ which didn't help me, as I don't see the problem.

Delftware answered 16/5, 2013 at 14:51 Comment(2)
I believe Red Hat comes with Archer GDB, which is the branch of GDB I mention above. It is good to know that debugging works in Linux, but I'm having a hard time getting it working on other OS's.Robyn
The link brulermavie.org/2012/02/how-to-debug-fortran-programs-using-gdb is dead.Dregs
B
1

I know may answer is a little off but Sun studio (sdb) and intel fortran also come with a debugger

Bosco answered 23/10, 2013 at 0:34 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.