Разобрать массив структур с помощью natvis

Я ищу способ отображения записей массива структур в отдельных массивах с помощью natvis в visual studio 2015.

Показать это

+-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;
};
Другие вопросы по тегам