【问题标题】:How to propagate ExcludeView/IncludeView in natvis?如何在 natvis 中传播 ExcludeView/IncludeView?
【发布时间】:2016-11-22 21:13:32
【问题描述】:

所以,假设我有 2 个类,C 和 B,它们具有组合关系,C 由 B 组成。

struct C
{
};

struct B
{
  C c;
};

现在,我有一个 natvis 文件,其中包含 C 的 2 个视图。我必须将此视图从 B 显式传播到 C 吗?这听起来很麻烦,因为 natvis 文件没有说明正在显示的类型,导致我希望传播该视图的位置丢失。此外,这不适用于容器。我只会查看单个项目。

编辑:

例子:

<?xml version="1.0" encoding="utf-8"?>
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
  <Type Name="C">
    <DisplayString>View 1</DisplayString>
  </Type>

  <Type Name="C" IncludeView="two">
    <DisplayString>View 2</DisplayString>
  </Type>

  <Type Name="B">
    <DisplayString>B</DisplayString>
    <Expand>
      <Item Name="C">c</Item>
    </Expand>
  </Type>
</AutoVisualizer>

现在在监视窗口中,我查看一个变量b,它的类型为B。要查看它,我输入:

b, view(two)

我希望视图传播到c 的视图。但事实并非如此。它会改为显示:

c    View 1

不用写:

  <Type Name="B">
    <DisplayString>B</DisplayString>
    <Expand>
      <Item Name="C" ExcludeView="two">c</Item>
      <Item Name="C" IncludeView="two">c</Item>
    </Expand>
  </Type>

我将如何做到这一点?

【问题讨论】:

  • “传播”是什么意思?在不同的 .natvis 文件之间?
  • @liorda,更新问题来回答你的问题。

标签: visual-studio-2015 natvis


【解决方案1】:

很遗憾,您不能将视图类型传递给嵌套元素。即使是你的例子

  <Type Name="B">
    <DisplayString>B</DisplayString>
    <Expand>
      <Item Name="C1" ExcludeView="two">c</Item>
      <Item Name="C2" IncludeView="two">c</Item>
    </Expand>
  </Type>

它没有按预期工作:

您必须添加, view(two) 才能获得正确的视图:

  <Type Name="B">
    <DisplayString>B</DisplayString>
    <Expand>
      <Item Name="C1" ExcludeView="two">c</Item>
      <Item Name="C2" IncludeView="two">c, view(two)</Item>
    </Expand>
  </Type>

【讨论】:

    猜你喜欢
    • 2021-04-20
    • 1970-01-01
    • 2012-03-18
    • 2021-11-06
    • 2017-04-24
    • 2019-06-24
    • 2011-09-26
    相关资源
    最近更新 更多