繁体   English   中英

Visual Studio Natvis DisplayString条件

[英]Visual Studio Natvis DisplayString Conditionals

使用Visual Studio 2017,我正在为某些类编写Visualizer,但是我遇到了关于.natvis代码可读性的问题。 我有一个自定义数组类型,我想直接Watch窗口的Value字段中显示其成员(而不是必须使用展开按钮)。

arrayType是一个定义数组类型的枚举(Sparse,Empty,Dense,Singleton)。 numElems是数组中的条目数。 无需关注这种数据结构; 这只是一个例子。 这是我目前的natvis代码:

<Type Name="MyProject::MyArray"
  <DisplayString Condition="numElems == 0">
    {arrayType,  en}
  </DisplayString>
  <DisplayString Condition="numElems == 1">
    {arrayType,  en} {*elems[0]}
  </DisplayString>
  <DisplayString Condition="numElems == 2">
    {arrayType,  en} {*elems[0]}, {*elems[1]}
  </DisplayString>
  <DisplayString Condition="numElems == 3">
    {arrayType,  en} {*elems[0]}, {*elems[1]}, {*elems[2]}
  </DisplayString>
  <DisplayString Condition="numElems >= 4">
    {arrayType,  en} {*elems[0]}, {*elems[1]}, {*elems[2]}, ...
  </DisplayString>
</Type>

[请注意,我必须重复相同的代码(只需添加一个额外的元素来显示)。 由于代码膨胀,我停止显示3个元素。

这将允许Watch Window (在Visual Studio中)以下列方式显示对象:

Name       Value
arr1       Sparse 5, 3                         ; numElems is 2
arr2       Empty                               ; numElems is 0
arr3       Singleton 1                         ; numElems is 1
arr4       Dense 58, 23, 1, ...                ; numElems is >= 4

理想情况下,DisplayString标记将允许其中的条件。 我已尝试使用C ++三元运算符进行以下解决方法,但这些运算符无效。

<Type Name="MyProject::Array"
  <DisplayString>
    {arrayType,  en} {(numElems >= 1) ? *elems[0] : ""}, {(numElems >= 2) ? *elems[1] : ""}, {(numElems >= 3) ? *elems[2] : ""}, {(numElems >= 4) ? "..." : ""}
  </DisplayString>
</Type>

请注意,在此代码中,我不必多次重复DisplayString标记并重复代码。 也许有一种方法可以在DisplayString中提供一个迭代器,以便列出所有(可变数量的)元素? 我知道ArrayItems标签,但必须在Expand标签中使用(同样,我试图在Value字段中显示数组元素(无需单击展开按钮))。

有什么建议? 需要澄清吗? 谢谢!

这不可能。 你已经拥有的是实现你想要的唯一方法(带有条件的多个DisplayStrings)。

你也可以使用{elems,[numElems]},这很简单,但也显示指针。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM