在我公司中,开发人员经常使用CMapStringToStr
对象,并且对于特定参数(例如,
m_mapUsers : every pointer is a CL_USER object
m_mapOthers : every pointer is a CL_OTHER object
我已经制作了一个本地可视化程序,用于以合理的可读方式扩展CMapStringToPtr
,如您在本摘录中所见:
m_mapUsers
0: ["User1"] 0x12345 void*
1: ["User2"] 0x23456 void*
...
m_mapOthers
0: ["Other1"] 0x98765 void*
1: ["Other2"] 0x98764 void*
...
我想识别m_mapUsers
和m_mapOthers
条目,以便获得如下结果:
m_mapUsers
0: ["User1"] {user=..., group=..., ...} CL_USER
1: ["User2"] {user=..., group=..., ...} CL_USER
...
m_mapOthers
0: ["Other1"] {reason=..., code=...} CL_OTHER
1: ["Other2"] {reason=..., code=...} CL_OTHER
...
这可能吗?
答案 0 :(得分:1)
我在项目中执行此操作的方法是首先对链接列表进行通用可视化。这就是您已经拥有的。
<Type Name="MyLinkedList">
<Expand>
<LinkedListItems>
<HeadPointer>this</HeadPointer>
<NextPointer>next</NextPointer>
<ValueNode>pData</ValueNode>
</LinkedListItems>
</Expand>
</Type>
然后,我去了我知道如何解释void
指针的类,我应该将它们转换为哪种类型。因此,我创建了一个与成员变量同名的Synthetic
值,将HeadPointer
从this
更改为成员变量的名称,最后为{{ 1}}。
ValueNode
缺点是我需要将代码复制到多个位置,但是它可以工作。
根据指针所指向的类型(例如始终为<Type Name="MyClass">
<Expand>
<Synthetic Name="m_list">
<Expand>
<LinkedListItems>
<HeadPointer>m_list</HeadPointer>
<NextPointer>next</NextPointer>
<ValueNode>(TheKnownType*)pData</ValueNode>
</LinkedListItems>
</Expand>
</Synthetic>
</Expand>
</Type>
?),也可以检测到CObject
中的类型,并根据右边的MyLinkedList
选择显示什么。