This is the mail archive of the gdb@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Fwd: Re: Proposal: offset based member name (or type) lookup]


Daniel Jacobowitz wrote:
On Sun, Jan 04, 2004 at 12:25:37PM -0500, Daniel Jacobowitz wrote:

On Sun, Jan 04, 2004 at 06:56:05PM +0100, Christoph Jaeschke wrote:

Hi,

I would like to propose a offset based member name lookup of
structs/classes. Assume:

   struct X {
       int a;
       int b;
   };

   struct Y {
       struct X x[4];
       int c;
   };

   struct Z {
       Y  y;
   };

If you apply a patch for gdb 6.0 I've prepared, you can ask gdb by

ptype Z + 28

about Z's relative name at offset 28

.y.x[3].b

using

ptype Z+28, typechain

gdb will append also the typechain

.y.x[3].b, typechain = ::Y::X[4]::int


There may be a better suited command than 'ptype' for it, it was choosen just because it was the simplest way to add it.


The patch contains also a caching mechanism, speeding up a lot if you do many lookups in big nested structures. It has a minimal memory requirement and will not hurt for single lookups.

The patch can be send if you are interested in.

Well, I don't like the syntax, but I think this is a wonderful idea. The other feature I've been meaning to add since forever is a variant of ptype which shows byte offsets for every field.

The problem with using ptype is that "Z+28" already has a meaning; gdb
will try to add the two, or call an overloaded + operator in C++, et
cetera.  This should probably be a new command; that'll be more useful
for MI anyway.


Oh, and I forgot the obligatory followup to this: if you are
interested in contributing this patch, and I hope you are, then please
file an FSF copyright assignment.  Jim or Andrew can send you the
appropriate forms to get the process started.


Sure, I'm interested in contributing. But, because I'm not very familiar with the command interface (that's why ptype was re-used), I would be happy if someone else create a new command and just call the processing func.


If Jim or Andrew send me the forms, you will get the patch.


BTW, assuming also


...

	struct Z {
	    Y  y;
	};

Z z;

someone may enhance the 'info symbol' command (using 'whatis' and the patch) to fully resolve the name at some address, for example

	(gdb) info symbol 0x8049530
	z + 16 in section .bss
	(gdb) whatis z
	type = Z
	(gdb) ptype Z+16
	.y.x[2].a
	(gdb)

concatenating to:

z.y.x[2].a


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]