This is the mail archive of the gdb@sourceware.org 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]

Re: automated cast to different data type possible?


On Thursday 12 May 2011 18:05:13 ext Tom Tromey wrote:
> >>>>> "Klaus" == Klaus Rudolph <lts-rudolph@gmx.de> writes:
> 
> Tom> You want "set print object on".
> 
> Klaus> This only works with classes which includes a vtable, but there
> Klaus> is no virtual function inside that hierarchy.
> 
> Sorry about that; you even noted this in your original message and I
> missed it.
> 
> Pretty-printers just change how a value is displayed.  They don't change
> the type. [...]

Assuming that I understood the task correctly it can be done with 
gdb python scripting nevertheless.

Given

    struct KRBase
   {
      enum Type { TYPE_A, TYPE_B } type;
      KRBase(Type _type) : type(_type) {}
   };

   struct KRA : KRBase { int x, y; KRA() : KRBase(TYPE_A), x(1), y(32) {} };
   struct KRB : KRBase { KRB() : KRBase(TYPE_B) {}  };

   void testKR()
   {
      KRBase *ptr1 = new KRA;
      KRBase *ptr2 = new KRB;
      break_here();
  }

creating a display of 

	ptr1	 @0x809a9d0	KRA
		KRBase		KRA
		x	1	int
		y	32	int
	ptr2	 @0x809a9e0	KRB
		KRBase		KRB

takes three lines of python code:

   def qdump__KRBase(d, item):
       base = ["KRA", "KRB"][int(item.value["type"])]
       d.putItem(Item(item.value.cast(lookupType(base)), item.iname))

[using, admittedly, the *cough* "other" approach to pretty printing]


Andre'

PS: I put a real screenshot at 
  
  http://imageshack.us/photo/my-images/135/kr2e.png

as I am not sure how acceptable attaching a 15k .png is on this list.


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