在Visual Studio上的内存地址处观察一个类对象

时间:2009-05-18 09:05:41

标签: windows visual-studio debugging

我正在调试用户转储文件,并且堆栈跟踪顶部有这个类成员函数

  • 堆栈跟踪是这样的 -

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)生成相同的错误。

我在这做错了吗? - 什么是检索类对象值的正确方法?

4 个答案:

答案 0 :(得分:6)

只是一个盲目的猜测:尝试(myDLL!myClass *)(0x0012ECE0)

另一个问题,你怎么能确定它是你对象的地址?

作为旁注,请尝试使用windbg - 查找内存/堆栈周围的对象会更简单。

答案 1 :(得分:1)

这可能对您现在拥有的用户转储没有帮助,但是对于将来的用户转储,请将优化设置“忽略帧指针”设置为否。这有助于“此”指针和本地变量。

答案 2 :(得分:1)

这可能是由于嵌套类

示例: A级 {     B级     {         int i;     }; };

施放像(B *)(0x12345678)将失败,但(A :: B *)(0x12345678)将成功

答案 3 :(得分:0)

我通过添加dll context解决了这个问题:

{,,myDLL.dll}(myClass*)(0x028073a8)

Documentation here