微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用natvis像2d数组一样可视化列顺序矩阵

如何解决如何使用natvis像2d数组一样可视化列顺序矩阵

我有一个结构

struct Matrix2d
{
    // Column first ordered elements
    vector<int> m_elements;
    int m_numRows;
    int m_numCols;
};

m_elements存储{0、1、2、3、4、5、6、7、8}来表示2d矩阵

0,3,6
1,4,7
2,5,8

我想显示如下: RPA-Python

使用Natvis中的ArrayItems功能,我可以得出以下结论:

enter image description here

使用natvis代码

  <Type Name="Matrix2d">
    <Expand>
      <ArrayItems>
        <Direction>Backward</Direction>
        <Rank>2</Rank>
        <Size>$i==0?m_numRows:m_numCols</Size>
        <ValuePointer>&amp;m_elements[0]</ValuePointer>
      </ArrayItems>
    </Expand>
  </Type>

但这确实很丑陋,我宁愿每一行都是单个项目,而不是每个元素都是一个项目,就像array2d的可视化方式一样。

您将如何在Natvis中编写代码,以便可以以这种方式可视化Matrix2d?

解决方法

对于这样的结构,我更喜欢使用CustomListItems。在您的情况下,它可能看起来像这样:

  <Type Name="Matrix2d">
    <Expand>
      <CustomListItems>
        <Variable Name="i" InitialValue="0"/>
        <Loop Condition="i  &lt; m_numRows">
          <Item Name="{i}">&amp;m_elements[i * m_numCols],[m_numCols]na</Item>
          <Exec>++i</Exec>
        </Loop>
      </CustomListItems>
    </Expand>
  </Type>

示例:

struct Matrix2d
{
    Matrix2d(int r,int c) : m_numRows(r),m_numCols(c),m_elements(r * c,0) {}
    // Column first ordered elements
    std::vector<int> m_elements;
    int m_numRows;
    int m_numCols;
};
Matrix2d g(4,3);

example

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。