msvc natvis ビジュアライザーを使用してパーソナル ビジュアライザーを実装しようとしています。問題は、ユニオンに関してそれを行う方法がわからないことです。2 つの構造体 (および)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 の 2 つの型を作成できます。
<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>
しかし、「値」変数 (共用体) がある場合、これらの型を自動的にプレビューするにはどうすればよいですか。私はこの点に固執しています:(変数の型が string1 を示すために 1 、 string2 を示すために 2 に等しいと仮定します)。私はやった:
<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 ドキュメントはユニオンを考慮していません..) 明らかに、この例は意味がありませんが、私ははるかに複雑なユニオンを持っているので、理解するだけです。