在虚拟表中查询函数偏移量

时间:2014-04-08 14:39:13

标签: c++ visual-studio-2005 wxwidgets virtual-functions

是否存在调试编译器依赖(Visual Studio 2005)方法来确定对象的虚拟表的大小或特定函数的偏移量?我想补充一些断言。

更大的问题(背景):大型工业应用,我只是新的维护,我收到"运行时检查失败#0 - ESP的值没有在功能中正确保存呼叫。 [BLA-BLA-BLA]"因为虚函数调用功能错误。原因?包含文件的顺序很重要(没有预编译的头文件)。如果" ws\winundef.h" (wxWidgets:https://github.com/wxWidgets/wxWidgets/blob/master/include/wx/msw/winundef.h)包含在" windows.h"之后它工作正常。

编辑从调试器的监视窗口:错误的函数指针是0x0a01dec5 [thunk]:MyPanel :: vcall'{696,{flat}}' }' , the good function pointer is 0x0a12e041 [thunk]:MyPanel:: vcall' {692,{flat}}' }' 我该如何访问这些内容?

1 个答案:

答案 0 :(得分:1)

vtbl的大小在不同的TU之间并没有真正改变,所以检查它不会帮助你。

您需要做的是确保在包含wxWidgets标头之前从不包含<windows.h>。如果您需要包含它(大部分时间都不应该包含它),请改为包含<wx/msw/wrapwin.h>。在您的PCH中执行此操作(并确保项目中的所有文件都使用PCH)几乎是解决问题的方法。