看这个屏幕截图Visual C++调试会话:现在Visual C++调试和神秘的BoundsChecker
http://yp.lviv.ua/philez/wtf.PNG
执行点是一个虚拟函数的内部。 “mDb”是对该类的成员的对象的引用。 “MDB” 有型CDbBackend &。只有一个线程。红色矩形中的值应该相等,但它们不是。这怎么可能?
被调试的代码已经仪表用的BoundsChecker(存储器调试器和分析器)。这种差异导致之后的崩溃。非检测代码不会导致任何这些影响。我认为这是太早指责的BoundsChecker - 它很可能是在我的程序隐藏的错误,这错误的BoundsChecker透露,这就是为什么我很倾向于了解情况。
为“B = & MDB”语句生成的组件是如下,在情况下,它是相关的。步进thhrough该组件中,以手表和寄存器可见,被捕获here(500KB AVI文件)。
007AB7B0 push 4
007AB7B2 push 80000643h
007AB7B7 push 4
007AB7B9 push 0C0002643h
007AB7BE lea eax,[ebp-10h]
007AB7C1 push eax
007AB7C2 call dword ptr [_numega_finalcheck_C_110456 (8FA8A8h)]
007AB7C8 mov eax,dword ptr [eax]
007AB7CA add eax,1CCh
007AB7CF push eax
007AB7D0 call dword ptr [_numega_finalcheck_C_110456 (8FA8A8h)]
007AB7D6 mov dword ptr [ebp-70h],eax
007AB7D9 push dword ptr [ebp-70h]
007AB7DC push 4
007AB7DE push 50000643h
007AB7E3 lea eax,[ebp-20h]
007AB7E6 push eax
007AB7E7 call dword ptr [_numega_finalcheck_Y_110456 (8FA8ECh)]
007AB7ED mov ecx,dword ptr [ebp-70h]
007AB7F0 mov ecx,dword ptr [ecx]
007AB7F2 mov dword ptr [eax],ecx
是。它具有CDbBackend类型,并且在基类中声明。我正在编辑帖子。 无论如何,指针之间的差异是如此巨大,它几乎不可能是继承布局相关的偏移量。 – user38329 2009-11-06 16:13:31