本地可视化工具是否可以基于项目集合的参数名称来修改项目的显示?

时间:2018-10-11 07:53:33

标签: visual-studio natvis

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

这可能吗?

1 个答案:

答案 0 :(得分:1)

我在项目中执行此操作的方法是首先对链接列表进行通用可视化。这就是您已经拥有的。

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

然后,我去了我知道如何解释void指针的类,我应该将它们转换为哪种类型。因此,我创建了一个与成员变量同名的Synthetic值,将HeadPointerthis更改为成员变量的名称,最后为{{ 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选择显示什么。