getting subclass type from base class pointer

Paul Marquess Paul.Marquess@owmobility.com
Thu Oct 29 23:38:00 GMT 2015


> From: gdb-owner@sourceware.org [mailto:gdb-owner@sourceware.org] On Behalf Of Paul Marquess
> 
> I must be missing something obvious, so apologies upfront.
> 
> Consider this simple snippet of C++
> 
> 
> class SuperClass
> {
> };
> 
> class SubClass : public SuperClass
> {
> };
> 
> int main()
> {
>     SuperClass* pTest = new SubClass;
> 
>     delete pTest; // << Break here in GDB }
> 
> Using the python API I'm trying to determine the type of object that pTest points to. 
> 
> 
> gdb) python x = gdb.parse_and_eval("pTest")
> (gdb) python print x.type
> SuperClass *
> (gdb) python print x.dereference().type
> SuperClass
> 
> How do I get at the SubClass object using the Python API?


Quick follow-up to my own post, the actual code I'm working with is more like shown below, so I there should be a vtable in play. 
Same question - how get at the SubClass object if I have a pointer to a SuperClass object using the Python API?


class SuperClass 
{
    public:
    virtual int fred() { return 1; }
    SuperClass() {}
    virtual ~SuperClass() {}
};

class SubClass : public SuperClass 
{
    public:
    virtual int fred() { return 2 ;}
    SubClass() {}
    virtual ~SubClass() {}
};

int main()
{
    SuperClass* pTest = new SubClass;

    delete pTest;
}



More information about the Gdb mailing list