首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于c++联合/结构的Natvis可视化器

用于c++联合/结构的Natvis可视化器
EN

Stack Overflow用户
提问于 2016-02-14 22:58:36
回答 1查看 1.1K关注 0票数 4

我正在尝试使用msvc可视化工具来实现一个个人可视化器。问题是我不知道如何处理工会问题。一个简单的示例,其结构( value)包含两个结构(string1string2 )的联合:

代码语言:javascript
复制
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创建两种类型:

代码语言:javascript
复制
<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>

但是,当我有一个"value“变量(联合)时,如何自动预览这些类型。我坚持这一点:(假设变量类型为1表示string1,2表示string2 )。我所做的是:

代码语言:javascript
复制
 <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>

因此,我希望根据类型值,调试将显示正确的可视化工具。你能解释一下我如何处理与纳特维斯的关系吗?还是有什么地方可以举个例子?(官方的msvc文档不考虑工会。)显然,这个例子是没有意义的,但它只是为了理解,因为我有一个更复杂的联盟。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-27 08:06:14

下列措施应能发挥作用:

代码语言:javascript
复制
<Type Name="value">
  <DisplayString Condition="type == 1">{t.sval}</DisplayString>
  <DisplayString Condition="type == 2">{t.sval2}</DisplayString>
  <Expand>
    <ExpandedItem Condition="type == 1">t.sval</ExpandedItem>
    <ExpandedItem Condition="type == 2">t.sval2</ExpandedItem>
  </Expand>
</Type>

ExpandedItem移除联合视图并使用string1 resp。相反,string2展开取决于类型的值。

我没有尝试使用我在这里发布的XML,因此可能会出现一些语法错误,但是您应该能够让它处理一些小的调整(如果有的话)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35399052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档