我正在尝试使用 msvc natvis 可视化器实现个人可视化器。问题是我不知道如何在工会方面做到这一点。value
一个包含两个结构 (string1
和) 并集的结构 ( ) 的简单示例string2
:
typedef struct value
{ int type; /* variable type */
union
{
string1 sval;
string2 sval2;
} t;
}
typedef struct string1
{
int size;
char *data;
} aString1;
typedef struct string2
{
int size;
char *data;
} aString2;
我可以在 natvis 中使用以下代码为 string1 和 string2 创建两种类型:
<Type Name="string1"> /// (A) preview
<DisplayString>{{ string 1 }}</DisplayString>
<Expand>
<Item Name="text">data</Item>
</Expand>
</Type>
<Type Name="string2"> /// (B) preview
<DisplayString>{{ string 2 }}</DisplayString>
<Expand>
<Item Name="text">data</Item>
</Expand>
</Type>
但是当我有一个“值”变量(联合)时,如何自动预览这些类型。我坚持这一点:(假设变量类型等于 1 表示 string1,2 表示 string2 )。我已经做好了 :
<Type Name="value">
<DisplayString>{{Value}}</DisplayString>
<Expand>
<Synthetic Name="String 1 Name" Condition="type==1"> // assume type of string1 = 1
/// here i want to call preview I have created for string1 in (A)
</Synthetic>
<Synthetic Name="String 2 Name" Condition="type==2"> // assume type of string2 = 2
/// here i want to call preview I have created for string2 in (B)
</Synthetic>
</Expand>
</Type>
所以我希望根据类型值,调试将显示正确的可视化工具。你能解释一下如何处理与 natvis 的联合吗?或者有什么例子吗?(官方的 msvc 文档不考虑联合。)很明显,这个例子没有任何意义,但这只是为了理解,因为我有一个更复杂的联合。