如何在 natvis 中传播 ExcludeView/IncludeView?
Posted
技术标签:
【中文标题】如何在 natvis 中传播 ExcludeView/IncludeView?【英文标题】:How to propagate ExcludeView/IncludeView in natvis? 【发布时间】: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,更新问题来回答你的问题。 【参考方案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>
【讨论】:
以上是关于如何在 natvis 中传播 ExcludeView/IncludeView?的主要内容,如果未能解决你的问题,请参考以下文章
如何将单个字符的 natvis 限制为仅 Visual Studio 中的字符
在使用外部调试器时在 VS2013 中使用 NatVis 文件
如何(临时)使用 natvis 对 CPtrList 条目进行类型转换?