Может ли встроенный визуализатор изменить отображение элемента на основе имени параметра его коллекции?
В моей компании разработчики регулярно используют 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
выберите, что отображать.