Как сделать несколько расширений списка для одного типа с помощью визуализатора отладчика natvis Visual Studio C++

Я пытаюсь сделать визуализатор отладчика для контейнера, который хранит значения в кусках. Я хочу сделать расширение списка как для значений, так и для кусков, но, насколько я вижу, один тип может иметь только одно расширение списка. Может быть несколько подузлов Expand, таких как ArrayItems, но все они создают один список. Да, я могу сделать расширение чанков для контейнера, а затем сделать расширение значения для каждого чанка. Но мне нужны два контейнерных подузла с такими расширениями:

MyList
|-values
| |-0
| |-1
|
|-chunks
| |-0
| |-1

Есть ли способ сделать это с помощью natvis xml?


person Dmitry Teslenko    schedule 25.12.2020    source источник
comment
Я предлагаю вам использовать Synthetic item expansion. Это позволяет вам создать искусственный дочерний элемент, который не является результатом выражения. Искусственный элемент может иметь собственные дочерние элементы. Вы можете обратиться к Micorsoft Docs для получения дополнительной информации.   -  person Barrnet Chou    schedule 28.12.2020


Ответы (1)


Вы можете использовать <Synthetic> для этого. Код внутри <Synthetic> может быть, например, <Item> или <ArrayItems>, а также любым другим типом элемента.

<Type Name="MyList">
  <DisplayString>...</DisplayString>
  <Expand>
    <Synthetic Name="values">
      <DisplayString>...</DisplayString>
      <Expand>
        <!-- code for displaying as values -->
      </Expand>
    </Synthetic>
    <Synthetic Name="chunks">
      <DisplayString>...</DisplayString>
      <Expand>
        <!-- code for displaying as chunks-->
      </Expand>
    </Synthetic>
  </Expand>
</Type>
person Werner Henze    schedule 03.01.2021