【问题标题】:How to watch a CMap (CArray) object, based on its memory address如何根据内存地址查看 CMap (CArray) 对象
【发布时间】:2017-12-04 10:15:59
【问题描述】:

我仍在使用相同的脚本,我在 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 监视窗口中打开对象,但无论我尝试什么,这似乎都失败了:

(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

有人知道我如何根据内存地址在 Visual Studio 的监视窗口中显示 CMap(或 CArray)对象吗?

【问题讨论】:

  • 这与STL无关...
  • @sergiol:所以?我刚刚在这个网页上搜索了 STL,第一个也是唯一一个条目是你的评论 :-)
  • 我刚刚编辑了您的问题以删除所有 STL 引用。

标签: c++ visual-studio debugging visual-c++ mfc


【解决方案1】:

似乎调试器的CMap定义有问题,通过从类型定义中删除__ptr64条目(注意__ptr64开头的空格),我可以看到变量的内容:

(CMap<int,int,CUIntArray *,CUIntArray *>*) 0x000000eab8748430

我相信调试器中存在错误:-)

【讨论】:

  • 感谢您在这里分享您的解决方案,您可以将其标记为答案。祝你有美好的一天:)
  • 只有一件事我还没有弄清楚:调试器是否有问题,特别是 __ptr64 或者类型定义包含两个东西 CUIntArray__ptr64 ,还有待调查,但我目前没有其他案例。
猜你喜欢
  • 1970-01-01
  • 2014-08-27
  • 2020-10-27
  • 1970-01-01
  • 1970-01-01
  • 2018-09-08
  • 2010-09-12
  • 2018-10-05
  • 1970-01-01
相关资源
最近更新 更多