From: Patrick Alken <patrick.alken@colorado.edu>
To: gdb@sourceware.org
Subject: fortran arrays in gdb
Date: Sat, 03 Mar 2007 22:00:00 -0000 [thread overview]
Message-ID: <20070303220033.GA17346@hippogriff.physics.drexel.edu> (raw)
[-- Attachment #1: Type: text/plain, Size: 1722 bytes --]
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
[-- Attachment #2: mat.c --]
[-- Type: text/plain, Size: 288 bytes --]
#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;
}
[-- Attachment #3: testmat.f --]
[-- Type: text/plain, Size: 234 bytes --]
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
next reply other threads:[~2007-03-03 22:00 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-03-03 22:00 Patrick Alken [this message]
2007-03-03 22:23 ` Patrick Alken
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=20070303220033.GA17346@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