Может ли встроенный визуализатор изменить отображение элемента на основе имени параметра его коллекции? - PullRequest
0 голосов
/ 11 октября 2018

В моей компании разработчики регулярно используют CMapStringToStr объекты, и всегда указатели имеют один и тот же тип для определенного параметра, например

m_mapUsers  : every pointer is a CL_USER object
m_mapOthers : every pointer is a CL_OTHER object

. Я уже создал собственный визуализатор для расширения.CMapStringToPtr приемлемым для чтения способом, как вы можете видеть в этом отрывке:

m_mapUsers
  0: ["User1"]     0x12345     void*
  1: ["User2"]     0x23456     void*
  ...
m_mapOthers
  0: ["Other1"]    0x98765     void*
  1: ["Other2"]    0x98764     void*
  ...

Я хотел бы, чтобы записи m_mapUsers и m_mapOthers были распознаны, чтобыполучить результат, подобный следующему:

m_mapUsers
  0: ["User1"]     {user=..., group=..., ...}     CL_USER
  1: ["User2"]     {user=..., group=..., ...}     CL_USER
  ...
m_mapOthers
  0: ["Other1"]    {reason=..., code=...}     CL_OTHER
  1: ["Other2"]    {reason=..., code=...}     CL_OTHER
  ...

Возможно ли это?

1 Ответ

0 голосов
/ 07 ноября 2018

Способ, которым я сделал это в своем проекте, - сначала иметь общую визуализацию для моего связанного списка.Это то, что у вас уже есть.

<Type Name="MyLinkedList">
  <Expand>
    <LinkedListItems>
      <HeadPointer>this</HeadPointer>
      <NextPointer>next</NextPointer>
      <ValueNode>pData</ValueNode>
    </LinkedListItems>
  </Expand>
</Type>

Затем я пошел в классы, где я знал, как интерпретировать указатели void, к какому типу я должен их привести.Поэтому я создал значение Synthetic с тем же именем, что и переменная-член, изменил HeadPointer с this на имя переменной-члена и, наконец, произвел приведение типа для ValueNode.

<Type Name="MyClass">
  <Expand>
    <Synthetic Name="m_list">
      <Expand>
        <LinkedListItems>
          <HeadPointer>m_list</HeadPointer>
          <NextPointer>next</NextPointer>
          <ValueNode>(TheKnownType*)pData</ValueNode>
        </LinkedListItems>
      </Expand>
    </Synthetic>
  </Expand>
</Type>

Недостатком является то, что мне нужно скопировать код в несколько мест, но он работает.

В зависимости от типов, на которые указывают ваши указатели (например, всегда CObject?), Он может такжеможно определить тип в MyLinkedList и в зависимости от права Condition выбрать, что отображать.

...