Может ли встроенный визуализатор изменить отображение элемента на основе имени параметра его коллекции?

В моей компании разработчики регулярно используют 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 ответ

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

<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 выберите, что отображать.

Другие вопросы по тегам