4

msvc natvis ビジュアライザーを使用してパーソナル ビジュアライザーを実装しようとしています。問題は、ユニオンに関してそれを行う方法がわからないことです。2 つの構造体 (および)valueの和集合を含む構造体 ( ) の単純な例:string1string2

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 ドキュメントはユニオンを考慮していません..) 明らかに、この例は意味がありませんが、私ははるかに複雑なユニオンを持っているので、理解するだけです。

4

1 に答える 1