I'm trying to print an object's vtable using gdb; I found the
show print vt bl on
setting, but I still don't actually know how to print the vtable - p *object still doesn't print it out.
How do I print the vtable?
I'm trying to print an object's vtable using gdb; I found the
show print vt bl on
setting, but I still don't actually know how to print the vtable - p *object still doesn't print it out.
How do I print the vtable?
A more compact solution:
p /a (*(void ***)obj)[0]@10
If you have a sufficiently new version of gdb, you may want to look at the "info vtbl" command.
I only noticed the feature when googling for an answer to this question and I noticed posts to the gdb mailing list circa 2012, notably this one from March 2012:
(gdb) set $i = 0 (gdb) while $i < 10 >print $i >p /a (*(void ***)obj)[$i] >set $i = $i + 1 >end
Where "obj" is the object whose vtable you'd like to print, and 10 is the number of methods.
For the example at http://en.cppreference.com/w/cpp/language/virtual
Without using 'info vtbl'
(gdb) p b
$1 = {_vptr.Base = 0x400a60 <vtable for Base+16>}
(gdb) x/16x 0x400a60
0x400a60 <_ZTV4Base+16>: 0x0040094c 0x00000000 0x72654437 0x64657669
(gdb) x/16x 0x0040094c
0x40094c <Base::f()>: 0xe5894855 0x10ec8348 0xf87d8948 0x400a15be
0x40095c <Base::f()+16>: 0x10c0bf00 0xf9e80060 0xc9fffffd 0x485590c3
0x40096c <Derived::f()+2>: 0x8348e589 0x894810ec 0x1bbef87d 0xbf00400a
0x40097c <Derived::f()+18>: 0x006010c0 0xfffddbe8 0x66c3c9ff 0x00841f0f