1

我知道默认的 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>

结果是这个输出,几乎是完美的。 在此处输入图像描述

  • 我希望地址不会显示
  • 我希望我可以为元素提供一个自定义格式说明符(例如 %.2f )

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

在此处输入图像描述

任何人都知道我怎样才能使这些行的大小可变?

4

1 回答 1

1

尝试[width] nag

<Item>(values + (i * width)), [width] nag</Item>
  • -[size]展开固定大小的数组,
  • na- “无地址” - 抑制地址,
  • g- 更好地查看浮点数据。
于 2020-05-07T10:31:40.247 回答