[英]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.