簡體   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