Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 在Visual Studio上查看内存地址处的类对象_Windows_Visual Studio_Debugging - Fatal编程技术网

Windows 在Visual Studio上查看内存地址处的类对象

Windows 在Visual Studio上查看内存地址处的类对象,windows,visual-studio,debugging,Windows,Visual Studio,Debugging,我正在调试一个用户转储文件,在堆栈跟踪的顶部有一个类成员函数 堆栈跟踪是这样的- msvcr80.dll__无效的参数\u noinfo()+0xc字节-第一帧 msvcr80.dll__无效的参数\u noinfo()+0xc字节-第二帧 我的DLL!myClass::myClassMemFunc(int val=90)-3帧 现在,当我跳到第三帧时,“this”指针值无效(“this”值是从ECX寄存器中检索的,但是ECX寄存器值在上面堆栈跟踪的前两个函数中发生了更改-) 所以我无法看到

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

  • 堆栈跟踪是这样的-
msvcr80.dll__无效的参数\u noinfo()+0xc字节-第一帧 msvcr80.dll__无效的参数\u noinfo()+0xc字节-第二帧 我的DLL!myClass::myClassMemFunc(int val=90)-3帧

现在,当我跳到第三帧时,“this”指针值无效(“this”值是从ECX寄存器中检索的,但是ECX寄存器值在上面堆栈跟踪的前两个函数中发生了更改-) 所以我无法看到我的类对象的实际成员变量-

但是我知道我的类对象的地址,也就是 0x0012ECE0

当我试着用- (myClass*)(0x0012ECE0)

我得到一份工作 CXX0019:错误:错误类型转换

偶数(myClass)(0x0012ECE0)生成相同的错误

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

只是瞎猜:try(myDLL!myClass*)(0x0012ECE0) 另一个问题,你如何确定它是你的对象的地址?
作为补充说明,请尝试windbg—查找内存/堆栈周围的对象要简单得多。

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

这可能是由于嵌套类造成的

例如: 甲级 { B类 { int i; }; };


类强制转换(B*)(0x12345678)将失败,但(A::B*)(0x12345678)将成功

我通过添加dll上下文解决了此问题:

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