我正在尝试使用gdb打印对象的vtable;我找到了
show print vt bl on
设置,但我实际上还不知道如何打印vtable - p *对象仍然无法打印出来。
如何打印vtable?
答案 0 :(得分:43)
更紧凑的解决方案:
p /a (*(void ***)obj)[0]@10
答案 1 :(得分:33)
如果您有足够新版本的gdb,您可能需要查看“info vtbl”命令。
我在谷歌搜索这个问题的答案时才注意到该功能,我注意到大约2012年的gdb邮件列表的帖子,特别是2012年3月的这个帖子:
答案 2 :(得分:10)
(gdb) set $i = 0 (gdb) while $i < 10 >print $i >p /a (*(void ***)obj)[$i] >set $i = $i + 1 >end
其中“obj”是您要打印的vtable的对象,10是方法的数量。
答案 3 :(得分:3)
在实际的gdb 7.5.1中,命令是 not info vtable!
使用 info vtbl
答案 4 :(得分:3)
有关http://en.cppreference.com/w/cpp/language/virtual
的示例不使用&#39; info vtbl&#39;
(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