= *Inspecting the Virtual Table for Inheritance (C++)* In C++, To inspect whether a pointer to a allocated object is of type the pointer is declared to a particular class or it is object of a class which is dervied from the class of which the type of the pointer is. To check it, we can use the virtualy pointer table of derived class which can help us in such information. We can use command: [source,] ---- info vtbl ---- [source,] ---- (gdb) info vtbl obj2 vtable for 'Base' @ 0x555555557d48 (subobject @ 0x55555556b6e0): [0]: 0x5555555552e2 (gdb) ---- Code: [source,] ---- #include class Base { public: Base () { std::cout << "base\n"; } virtual void VirtualMember () { } }; class Derived : public Base { public: Derived () { std::cout << "derived\n"; } void VirtualMember () { } }; int main () { Base *obj = new Base; Base *obj2 = new Derived; return 0; } ---- === *GDB Command Debug Levels* There are different level of debugging information that we can achieve using the different type of `-g` flag during compilation. This is mainly to get _macro_ information as these are not added to debug symbol by default. Different levels of Debugging symbols: 1. -g0 2. -g1 3. -g2 (default) 4. -g3 5. -ggdb3 (highest level specifically for GDB debugger) To see the information for all the macro, use command: [source,] ---- info macros ---- To see the information for particular macro, use command: [source,] ---- info macro ----