Mirror of the gdb mailing list
 help / color / mirror / Atom feed
From: Patrick Alken <patrick.alken@colorado.edu>
To: gdb@sourceware.org
Subject: Re: fortran arrays in gdb
Date: Sat, 03 Mar 2007 22:23:00 -0000	[thread overview]
Message-ID: <20070303222319.GA20123@hippogriff.physics.drexel.edu> (raw)
In-Reply-To: <20070303220033.GA17346@hippogriff.physics.drexel.edu>

Hi again,

  Interestingly, I can get correct results using the following method:

(gdb) p a
$76 = (PTR TO -> ( real*8 (1,1))) 0xbfa83ed0
(gdb) p *((double*)0xbfa83ed0 + 1 + 1*4)
$78 = 6

where I just printed out a(2,2), so in other words, I can use

(gdb) p *((double*)0xbfa83ed0 + r + c*4)

where 'r' is the row I want and 'c' is the column I want. So
why won't the a(r,c) syntax work?

On Sat, Mar 03, 2007 at 03:00:33PM -0700, Patrick Alken wrote:
> Hello,
> 
>   I am trying to call fortran subroutines from C and then step
> through the fortran code with gdb. Unfortunately, gdb (version 6.5)
> cannot properly display the contents of 2D arrays passed to the fortran
> routine. I have created 2 simple files:
> 
> mat.c - a C program which calls the fortran routine with a 4x4 matrix
> testmat.f - a fortran77 subroutine which prints out the matrix
> 
> These were compiled with:
> 
> g77 -g -Wall -c testmat.f
> gcc -g -Wall -o mat mat.c testmat.o -lg2c
> 
> Here is the output of the program (which is correct):
> 
> > ./mat
>  a( 1, 1) =  1.
>  a( 1, 2) =  5.
>  a( 1, 3) =  9.
>  a( 1, 4) =  13.
>  a( 2, 1) =  2.
>  a( 2, 2) =  6.
>  a( 2, 3) =  10.
>  a( 2, 4) =  14.
>  a( 3, 1) =  3.
>  a( 3, 2) =  7.
>  a( 3, 3) =  11.
>  a( 3, 4) =  15.
>  a( 4, 1) =  4.
>  a( 4, 2) =  8.
>  a( 4, 3) =  12.
>  a( 4, 4) =  16.
> 
> Now here is the problem: when I step through the fortran subroutine
> with gdb and try to print out individual array values, it gives
> incorrect results:
> 
> > gdb mat
> ...
> (gdb) break testmat_
> Breakpoint 1 at 0x8048592: file testmat.f, line 1.
> (gdb) r
> Starting program: /home/cosine/C/mat 
> 
> Breakpoint 1, testmat_ (n=0xbfa83ecc, a=0xbfa83ed0) at testmat.f:1
> 1             subroutine testmat(n,a)
> Current language:  auto; currently fortran
> (gdb) n
> 6             do 10 i = 1, n
> (gdb) p a(2,2)
> $1 = 3
> (gdb) p a(4,3)
> $2 = 6
> (gdb) p a(3,4)
> $3 = 6
> (gdb) 
> 
> By comparing this with the correct output from calling the program,
> we know that a(2,2) should in fact be 6, not 3. a(4,3) should be 12,
> not 6, and a(3,4) should be 15, not 6.
> 
> Can someone please tell me if there is a way to correct this problem.
> I really need to be able to step through fortran code and be able
> to rely on the gdb output. Please help!
> 
> Patrick Alken
> 

> #include <stdio.h>
> 
> void testmat_(int *n, double *A);
> 
> int main()
> {
>   double data[] = { 1.0, 2.0, 3.0, 4.0,
>                     5.0, 6.0, 7.0, 8.0,
>                     9.0, 10.0, 11.0, 12.0,
>                     13.0, 14.0, 15.0, 16.0 };
>   int n = 4;
> 
>   testmat_(&n, data);
> 
>   return 0;
> }

>       subroutine testmat(n,a)
> c
>       integer n, i, j
>       double precision a(n,n)
> 
>       do 10 i = 1, n
>         do 20 j = 1, n
>           print *, 'a(', i, ',', j, ') =', a(i,j)
>    20   continue
>    10 continue
>       return
>       end


  reply	other threads:[~2007-03-03 22:23 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-03-03 22:00 Patrick Alken
2007-03-03 22:23 ` Patrick Alken [this message]
2007-03-05 12:33 ` Daniel Jacobowitz
2007-03-05 17:01   ` Patrick Alken
2007-03-05 17:09     ` Daniel Jacobowitz
2007-03-05 18:59       ` Patrick Alken

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20070303222319.GA20123@hippogriff.physics.drexel.edu \
    --to=patrick.alken@colorado.edu \
    --cc=gdb@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox