[fpc-devel] issue examining pointer/array/record elements with GDB
Seth Grover
sethdgrover at gmail.com
Thu Sep 8 18:03:40 CEST 2011
Good morning/afternoon/evening everyone (depending on where you are)!
I've often run into something annoying debugging FPC programs with
GDB, so I boiled it down a little bit into something that can be
reproduced.
Given this simple program:
=============================================
program project1;
{$mode objfpc}{$H+}
type
Record1 = record
a : integer;
b : integer;
end;
Record1Array = array of Record1;
Record2 = record
c : integer;
recs : Record1Array;
end;
PRecord2 = ^Record2;
var
myRec2 : PRecord2;
i : integer;
begin
new(myRec2);
myRec2^.c := 16;
SetLength(myRec2^.recs, myRec2^.c);
for i := 0 to myRec2^.c-1 do begin
myRec2^.recs[i].a := i;
myRec2^.recs[i].b := myRec2^.c - i - 1;
writeln(myRec2^.recs[i].a, ',', myRec2^.recs[i].b);
end;
dispose(myRec2);
end.
=============================================
If I compile this program with FPC 2.4.4 with debugging (-g), line
numbers in backtraces (-gl), and dwarf debug information (-gw), then
fire up GDB (I'm in Linux, by the way), put a breakpoint at the
writeln, then run, observe what happens:
(gdb) print MYREC2^
$3 = {C = 16, RECS = 0x7ffff7fee050}
(gdb) print MYREC2^.RECS
$4 = (^RECORD1ARRAY) 0x7ffff7fee050
(gdb) print MYREC2^.RECS^[I]
$5 = {A = 0, B = 15}
(gdb) print MYREC2^.RECS^[I].A
Type RECORD1ARRAY is not a structure or union type.
GDB seems to be able to keep track of things find up to the point
where I try to access an element of the records which comprise the
array. I can print MYREC2^.RECS^[I] just fine, but not print
MYREC2^.RECS^[I].A.
Is this a bug in the GDB info generated by the compiler, or a bug in GDB itself?
Thanks,
-SG
--
This email is fiction. Any resemblance to actual events
or persons living or dead is purely coincidental.
Seth Grover
More information about the fpc-devel
mailing list