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