使用 natvis 解构结构数组
Posted
技术标签:
【中文标题】使用 natvis 解构结构数组【英文标题】:Deconstruct array of structs with natvis 【发布时间】:2016-11-10 09:36:20 【问题描述】:我正在寻找一种方法,在 Visual Studio 2015 中使用 natvis 在单独的数组中显示结构数组的条目。
显示这个
+-x[0]
+-a
+-b
+-c
+-x[1]
+-a
+-b
+-c
...
作为
a
+-[0] (= x[0].a)
+-[1] (= x[1].a)
...
b
+-[0] (= x[0].b)
+-[1] (= x[1].b)
...
c
+-[0] (= x[0].c)
+-[1] (= x[1].c)
【问题讨论】:
您能否分享一张有关您身边阵列的默认监视窗口的屏幕截图?是不是表示要在同一个关卡中一个一个的显示一个箭头项的值?由于默认情况下所有默认值都共享为一个父项下的子项。 【参考方案1】:编辑:在评论之后,这是一个可行的解决方案,但它需要对齐您的代理类型,在我的情况下,这只能使用两个值的幂来完成。
#define A(t) __declspec(align(t))
struct C
int a;
int b;
int c;
int junk;
;
A(16) struct D
int z;
;
A(16) struct DB
int junk;
int z;
;
A(16) struct DC
int junk[2];
int z;
;
typedef union
D da;
DB db;
DC dc;
Ui;
typedef union
C c[50];
Ui d[50];
U;
原始(不完整)答案:
每种类型都被单独解析和可视化。因此,在解析每个 x 元素时,无法存储该数据以供以后聚合 a、b 和 c。
但是,您可以更改代码,使重叠(联合)类型与您的数组完全匹配。然后为每种类型编写单独的可视化工具:
__decltypestruct C int a,b,c; ;
struct D int a[10], b[10], c[10]; ;
union
C c[10];
D d;
;
【讨论】:
感谢您的回答,但我认为联合中的数据不会相同。 d.a[3] 将是 c[1].c.以上是关于使用 natvis 解构结构数组的主要内容,如果未能解决你的问题,请参考以下文章
三阶段课程——Day02(ES6简介let和const)(数据类型和数据结构:字符串扩展Symbol数组新增方法对象新增SetMap数组解构对象解构...运算符)