我仍在使用我在中提到的同一个脚本
this other StackOverflow post
.
总体思路:
-
使用脚本打开转储文件
-
查看所有变量的内存地址
-
试着获取一些信息
这一次
dt
功能似乎在
CMap
对象:
dt <application_name>!CMap<int,int,CUIntArray * __ptr64,CUIntArray * __ptr64> m_nCount 000000eab8748430
Ambiguous matches found for <application_name>!CMap<int,int,CUIntArray * __ptr64,CUIntArray * __ptr64> (dumping largest sized):
<application_name>!CMap<int,int,CUIntArray * __ptr64,CUIntArray * __ptr64>::~CMap<int,int,CUIntArray * __ptr64,CUIntArray * __ptr64>
<application_name>!CMap<int,int,CUIntArray * __ptr64,CUIntArray * __ptr64>::CMap<int,int,CUIntArray * __ptr64,CUIntArray * __ptr64> {0x02b bytes}
为了解决这个问题,我尝试在Visual Studio watch窗口中打开对象,但无论我尝试了什么,这似乎都失败了:
(CMap<int,int,CUIntArray * __ptr64,CUIntArray * __ptr64>)0x000000eab8748430 => identifier "sCMap..." is undefined
(CMap)0x000000eab8748430 => identifier "CMap" is undefined
(<application_name>!CMap<int,int,CUIntArray * __ptr64,CUIntArray * __ptr64>)0x000000eab8748430 => identifier "<application_name>" is undefined
(mfc110u!CMap<int,int,CUIntArray * __ptr64,CUIntArray * __ptr64>)0x000000eab8748430 => identifier "mfc110u" is undefined
...
然而,这种工作方式似乎适用于其他MFC类,例如
CStringArray
:
(CStringArray*)0x000000eab87c6d10 => this is giving good results
有人知道我如何展示
CMap
(或
CArray
)Visual Studio的监视窗口中的对象,基于其内存地址?