【问题标题】:Deconstruct array of structs with natvis使用 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)

【问题讨论】:

  • 您能否分享一张有关您身边阵列的默认监视窗口的屏幕截图?是不是表示要在同一个关卡中一个一个的显示一个箭头项的值?由于默认情况下所有默认值都共享为一个父项下的子项。

标签: debugging visual-studio-2015 natvis


【解决方案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.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-29
  • 1970-01-01
相关资源
最近更新 更多