本机可视化工具能否根据项目集合的参数名称修改项目的显示?

Can a native visualiser modify the display of an item, based on the parameter name of its collection?

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

这可能吗?

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

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

然后我去了 类,在那里我知道如何解释 void 指针,我应该将它们转换为哪种类型。所以我创建了一个与成员变量同名的 Synthetic 值,将 HeadPointerthis 更改为成员变量的名称,最后对 [= 进行了类型转换16=].

<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 select显示什么。