如何打印c++ 的vtble

48 阅读1分钟

什么是vtable

vtable 是一个virutal function 的数组
当类含有virtual function的时候,对象的头部会有以这个指向vtable的指针vptr

发生时机: vptr指向哪个vtable是编译时确定的

如何打印vtable

class Base  
{  
public:  
   virtual void function1() {};  
   virtual void function2() {};  
};  
  
class D1: public Base  
{  
public:  
   void function1() override {};  
};  
  
class D2: public Base  
{  
public:  
   void function2() override {};  
};  
int main(){  
   D1 d1 {};  
   Base* dPtr = &d1;  
  
   return 0;  
}

编译:

g++ -g main.cc

打印vtable

(gdb) info vt  dPtr  
vtable for 'Base' @ 0x555555557dc8 (subobject @ 0x7fffffffda00):  
[0]: 0x555555555154 <D1::function1()>  
[1]: 0x555555555148 <Base::function2()>

相关阅读