[fpc-devel] bug in ptype for dyn array (debug info / gdb)?

Martin fpc at mfriebe.de
Fri Jan 4 15:05:42 CET 2008


I was trying to look at e content of dyn-arrays under gdb and found that
it is very hard to get results.

(you may also want to look at
http://www.lazarus.freepascal.org/index.php?name=PNphpBB2&file=viewtopic&t=4763 

)

I used ptype to look at what gdb (under Lazarus) thinks the variable is.
declaring the following in my source (same for word/integer/...):

type
   Tab = array of byte;
var
    ab  : Tab;
    ab2 : array of byte;
    b1 : ^tab;

in "gbb -i mi"

> ptype ab
type = array [0..-1] of BYTE

>ptype @ab\n"
type = ^BYTE

>ptype ab2
type = array [0..-1] of BYTE

ptype @ab2
type = ^(array [0..-1] of BYTE)

>ptype b1
type = ^BYTE


I would assume that the type info is included by fpc?

IMHO it is inconsistent, and partly incorrect. So I am looking for any
feedback, maybe I got something wrong, maybe it is a bug, maybe there is
an intention?

-inconsistent: ab  and ab2  are the same type to the debugger, yet @ab
and @ab2 return different

-incorrect: ab and ab2 are "array [] of byte", but in reality they are
pointers.
  As a result "-data-evaluate-expression ab[0]" does return the wrong
value (It contains a byte out of the address of ab)

I don't know what the correct values should be, and despite the debugger
returning a ptype of "^{array [0..-1] of BYTE"; I don't know if that can
be set.

In terms of data evaluation, if ^(array...) is not possible (or does not
work in gdb?) then ^BYTE would probably be the best choice? Forcing b1
to point to the array ("b1=@(ab[0]"), and not to it's address
("b1=@ab") allows to do b1^[x] and get the correct data.


I don't expect there is a way to have ptype return the pascal declaraton
(which hdes the fact about the pointer), yet have gdb knowing of the
pointer?

Regards
Martin





More information about the fpc-devel mailing list