如何(临时)使用 natvis 对 CPtrList 条目进行类型转换?

多米尼克

我正在使用基于 STL 的 C++ 解决方案,并且我正在使用 CPtrList 集合。

我在这里有一个 CPtrList 集合,其中包含void *条目,我想使用 natvis 文件自动对它们进行类型转换。

目前,我的 natvis 如下所示:

<Type Name="CList&lt;*,*&gt;">
  <AlternativeType Name="CObList"></AlternativeType>
  <AlternativeType Name="CPtrList"></AlternativeType>
  <AlternativeType Name="CStringList"></AlternativeType>
  <AlternativeType Name="CTypedPtrList&lt;*,*&gt;"></AlternativeType>
  <DisplayString>{{iets anders Count = {m_nCount}}}</DisplayString>
  <Expand>
    <Item Name="Count">m_nCount</Item>
    <LinkedListItems>
      <Size>m_nCount</Size>
      <HeadPointer>m_pNodeHead</HeadPointer>
      <NextPointer>pNext</NextPointer>
      <ValueNode>data</ValueNode>
    </LinkedListItems>
  </Expand>
</Type>

因此,我的 CPtrList 条目如下所示:

0x<something>      void *
0x<something else> void *
...

我想将条目类型转换为这样的:

<information>      CElement::SL_SET_PARAMETER*
<information else> CElement::SL_SET_PARAMETER*

一旦我知道如何完成这项工作,我就可以在我的 natvis 中添加一个“SL_SET_PARAMETER”条目并决定如何显示它,但因此我首先需要向 natvis 解释每个 CPtrList 条目都应该被转换为“SL_SET_PARAMETER”对象。

有人知道怎么做这个吗?

阿德里安

您必须使用<CustomListItems>标签(有关更多详细信息,请参阅MS 文档中的CustomListItems 扩展项)。这是显示类型的最通用规范,它允许局部变量和循环。

他们在文档中使用的示例如下:

<Type Name="ATL::CAtlMap&lt;*,*,*,*&gt;">  
    <AlternativeType Name="ATL::CMapToInterface&lt;*,*,*&gt;"/>  
    <AlternativeType Name="ATL::CMapToAutoPtr&lt;*,*,*&gt;"/>  
    <DisplayString>{{Count = {m_nElements}}}</DisplayString>  
    <Expand>  
      <CustomListItems MaxItemsPerView="5000" ExcludeView="Test">  
        <Variable Name="iBucket" InitialValue="-1" />  
        <Variable Name="pBucket" InitialValue="m_ppBins == nullptr ? nullptr : *m_ppBins" />  
        <Variable Name="iBucketIncrement" InitialValue="-1" />  

        <Size>m_nElements</Size>  
        <Exec>pBucket = nullptr</Exec>  
        <Loop>  
          <If Condition="pBucket == nullptr">  
            <Exec>iBucket++</Exec>  
            <Exec>iBucketIncrement = __findnonnull(m_ppBins + iBucket, m_nBins - iBucket)</Exec>  
            <Break Condition="iBucketIncrement == -1" />  
            <Exec>iBucket += iBucketIncrement</Exec>  
            <Exec>pBucket = m_ppBins[iBucket]</Exec>  
          </If>  
          <Item>pBucket,na</Item>  
          <Exec>pBucket = pBucket->m_pNext</Exec>  
        </Loop>  
      </CustomListItems>  
    </Expand>  
</Type>  

它唯一的小问题是,如果您从监视窗口复制它创建的表达式,它将看起来像一个数字转换为您想要的类型的指针,而不是像语法一样漂亮的数组,因此如果内存位置移动,导致它不会被更新。如果您引用包含对象的父对象,这没什么大不了的,只是很烦人。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

NatVis:允许使用typedef吗?

来自分类Dev

在natvis中使用<CustomVisualizer>标记

来自分类Dev

NATVIS是否可以使用递归元组(可变模板)?

来自分类Dev

在natvis visualizer的第一个扩展级别上扩展模板类型的成员

来自分类Dev

使用外部调试器时在VS2013中使用NatVis文件

来自分类Dev

使用类型变量进行转换

来自分类Dev

使用对象进行类型转换

来自分类Dev

使用类型参数进行类型转换

来自分类Dev

如何将Redis条目转换为打字稿类型?

来自分类Dev

JavaScript如何进行类型转换?

来自分类Dev

如何在Powershell中进行类型转换

来自分类Dev

如何在javascript中进行类型转换?

来自分类Dev

使用float_of_int进行类型转换

来自分类Dev

使用Type类型的参数进行转换

来自分类Dev

使用类型为Type的参数进行转换

来自分类Dev

使用float_of_int进行类型转换

来自分类Dev

使用C语言进行类型转换

来自分类Dev

在 C 中使用指针进行类型转换

来自分类Dev

Visual Studio .natvis文件矩阵

来自分类Dev

Natvis Visualizer for C ++联合/结构

来自分类Dev

如何从类型创建临时表?

来自分类Dev

如何在NSUserDefaults中的字典条目中编写而不使用临时变量?

来自分类Dev

使用 asInstanceOf Scala 进行类型转换后类型错误

来自分类Dev

通过XSLT进行XSD转换:如何根据依赖关系对条目进行重新排序

来自分类Dev

如何在Shell脚本中使用临时语言环境对文件进行排序?

来自分类Dev

如何将数据从Excel发送到SQL临时表以使用VBA进行处理?

来自分类Dev

如何在Drupal 7中创建临时表和使用节点表进行JOIN

来自分类Dev

如何在MarkLogic 9中使用xdmp.Spawn()进行临时删除?

来自分类Dev

如何在Drupal 7中创建临时表和使用节点表进行JOIN

Related 相关文章

  1. 1

    NatVis:允许使用typedef吗?

  2. 2

    在natvis中使用<CustomVisualizer>标记

  3. 3

    NATVIS是否可以使用递归元组(可变模板)?

  4. 4

    在natvis visualizer的第一个扩展级别上扩展模板类型的成员

  5. 5

    使用外部调试器时在VS2013中使用NatVis文件

  6. 6

    使用类型变量进行转换

  7. 7

    使用对象进行类型转换

  8. 8

    使用类型参数进行类型转换

  9. 9

    如何将Redis条目转换为打字稿类型?

  10. 10

    JavaScript如何进行类型转换?

  11. 11

    如何在Powershell中进行类型转换

  12. 12

    如何在javascript中进行类型转换?

  13. 13

    使用float_of_int进行类型转换

  14. 14

    使用Type类型的参数进行转换

  15. 15

    使用类型为Type的参数进行转换

  16. 16

    使用float_of_int进行类型转换

  17. 17

    使用C语言进行类型转换

  18. 18

    在 C 中使用指针进行类型转换

  19. 19

    Visual Studio .natvis文件矩阵

  20. 20

    Natvis Visualizer for C ++联合/结构

  21. 21

    如何从类型创建临时表?

  22. 22

    如何在NSUserDefaults中的字典条目中编写而不使用临时变量?

  23. 23

    使用 asInstanceOf Scala 进行类型转换后类型错误

  24. 24

    通过XSLT进行XSD转换:如何根据依赖关系对条目进行重新排序

  25. 25

    如何在Shell脚本中使用临时语言环境对文件进行排序?

  26. 26

    如何将数据从Excel发送到SQL临时表以使用VBA进行处理?

  27. 27

    如何在Drupal 7中创建临时表和使用节点表进行JOIN

  28. 28

    如何在MarkLogic 9中使用xdmp.Spawn()进行临时删除?

  29. 29

    如何在Drupal 7中创建临时表和使用节点表进行JOIN

热门标签

归档