我知道默认的 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
,这没有帮助。
任何人都知道我怎样才能使这些行的大小可变?