矩阵显示行

Matrix display row wise

我知道默认的 ArrayItems-Tag 可以处理矩阵,但我发现结果不够。

给出这个例子

#include <cstdlib>
#include <cstdio>

struct matrix {
  int height;
  int width;
  double* values;
};

int main() {
  double* values = (double*)malloc(5 * 2 * sizeof(double));
  for (int i = 0; i < 10; ++i) values[i] = i * 2;
  matrix m = { 5, 2, values };

  return 0;
}

有了这个natvis

<?xml version="1.0" encoding="utf-8"?> 
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
  <Type Name="matrix">
    <DisplayString>{{Shape [{height} x {width}]}}</DisplayString>
    <Expand>
        <CustomListItems>
          <Variable Name="i" InitialValue="0" />
          <Loop>
            <Break Condition="i == height" />
            <Item>(values + (i * width)), 2</Item>
            <Exec>i++</Exec>
          </Loop>
        </CustomListItems>
      </Expand>
  </Type>
</AutoVisualizer>

结果是这个输出,几乎是完美的。

但我在 natvis 中作弊了。我写了 <Item>(values + (i * width)), 2</Item> 2 是行的宽度。但是,如果我写 width 而不是 2,它会输出 2 而不是行。它显然打印了 width 的值,这没有帮助。

有人知道我如何使这些行的大小可变吗?

尝试 [width] nag:

<Item>(values + (i * width)), [width] nag</Item>
  • [size]——扩展固定大小的数组,
  • na - "no address" - 隐藏地址,
  • g - 为了更好地查看浮点数据。