我正在调试用户转储文件,并且在堆栈跟踪的顶部有这个类成员函数
msvcr80.dll!__ invalid_parameter_noinfo()+ 0xc bytes - 1st FRAME msvcr80.dll!__ invalid_parameter_noinfo()+ 0xc bytes - 2nd FRAME myDLL!myClass :: myClassMemFunc(int val = 90) - 第3帧
现在,当我跳到第3帧时 - “this”指针值无效(从ECX寄存器中检索“this”值 - 但ECX寄存器值在上面的堆栈跟踪的前两个函数中发生了变化 - ) - 所以我无法看到我的类对象的实际成员变量 -
但我知道我的类对象的地址 - 这是0x0012ECE0
当我试图用 - (myClass *)(0x0012ECE0)观察内存地址时
我得到一个CXX0019:错误:输入错误
even(myClass)(0x0012ECE0)生成相同的错误。
我在这做错什么吗? - 什么是检索类对象值的正确方法?
只是一个盲目的猜测:尝试(myDLL!myClass *)(0x0012ECE0)
另一个问题,你怎么能确定它是你对象的地址?
作为旁注,试试windbg - 在内存/堆栈周围查找对象会更简单。
这可能对您现在拥有的用户转储没有帮助,但是对于将来的用户转储,请将优化设置“忽略帧指针”设置为否。这有助于“此”指针和本地变量。
这可能是由于嵌套类
示例:class A {class B {int i; }; };
像(B *)(0x12345678)的演员表会失败但是(A :: B *)(0x12345678)会成功