vs下debug监视,对虚函数表的显示是不是不全啊?

#include <iostream>
using namespace std;

class Base1 
{
public:
    virtual void f() { cout << "Base1::f" << endl; }
    virtual void g() { cout << "Base1::g" << endl; }
    virtual void h() { cout << "Base1::h" << endl; }

};

class Derive : public Base1
{
public:
    virtual void f1() { cout << "Derive::f1" << endl; }
    virtual void g1() { cout << "Derive::g1" << endl; }
    virtual void h1() { cout << "Derive::h1" << endl; }
};


typedef void(*Fun)(void);

int main()
{
    Fun pFun = NULL;

    Derive d;
    int** pVtab = (int**)&d;

    pFun = (Fun)pVtab[0][0];
    pFun();

    pFun = (Fun)pVtab[0][1];
    pFun();

    pFun = (Fun)pVtab[0][2];
    pFun();

    pFun = (Fun)pVtab[0][3];
    pFun();

    pFun = (Fun)pVtab[0][4];
    pFun();

    pFun = (Fun)pVtab[0][5];
    pFun();

    return 0;
}

运行如下:

图片描述

监视中只有3个虚函数,但是输出的是6个,说明确实存在的,但是vs没有显示。如果vs真的是显示不全的话,有没有别的工具可以看见对象的模型的?

阅读 3.5k
1 个回答

是的,显示不完全,需要用监视窗口手动显示虚表的所有内容。

(void**)0x65e8170c,10

更改上述表达式为你的虚表地址即可

clipboard.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题