0

在我的公司,开发人员经常使用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_mapUsersm_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
  ...

这可能吗?

4

1 回答 1

1

我在我的项目中这样做的方式是首先为我的链接列表提供一个通用的可视化。这是你已经拥有的。

<Type Name="MyLinkedList">
  <Expand>
    <LinkedListItems>
      <HeadPointer>this</HeadPointer>
      <NextPointer>next</NextPointer>
      <ValueNode>pData</ValueNode>
    </LinkedListItems>
  </Expand>
</Type>

然后我去了我知道如何解释void指针的类,我应该将它们转换为哪种类型。所以我创建了一个Synthetic与成员变量同名的值,将HeadPointerfrom更改为成员变量this的名称,最后为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并根据正确的Condition选择要显示的内容。

于 2018-11-07T10:58:31.417 回答