Natvis визуализация для динамического массива\ хеш-таблицы
В образовательных целях делаю свою реализацию хеш-таблицы с открытым хешированием на основе своего односвязного списка. Хочу сделать для нее адекватную визуализацию при отладке с помощью Natvis. Визуализация для списков успешно получилась.
Например в unordered_map или new int[100] при отладке отображаются все индексы в которых есть данные. Нужен хотя бы пример Natvis файла для динамического массива по типу int* arr[100]. Реализацию natvis для unordered_map видел но такая не подходит. Не совсем разобрался как работать с указателями в Natvis. В базовом представлении, т.е. по умолчанию отображается только начало хеш-таблицы, т.е. первый список,
Нужна подобная визуализация:
Имя Значение Тип
P 0x0159dc10{10} int*
P[0] 10 int
P[5] 2 int
Так как хеш-таблица имеет указатель на массив то думаю с примером для int* arr[] смогу дальше разобраться.
Ant_List<int>* table = new Ant_List<int>[100];
Если вдруг то Natvis для односвязного списка получилась такой
<?xml version="1.0" encoding="utf-8"?>
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
<Type Name="Ant_List<*>">
<DisplayString>{{size = {count}}}</DisplayString>
<Expand>
<Item Name="[size]">count</Item>
<LinkedListItems>
<Size>count</Size>
<HeadPointer>first</HeadPointer>
<NextPointer>Next</NextPointer>
<ValueNode>Data</ValueNode>
</LinkedListItems>
</Expand>
</Type>
</AutoVisualizer>
Ответы (1 шт):
Natvis:
<?xml version="1.0" encoding="utf-8"?>
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
<Type Name="simList">
<DisplayString>{{ size={count}}}</DisplayString>
<Expand>
<Item Name="[size]">count</Item>
<Item Name="[count_bucket]">count_bucket</Item>
<CustomListItems MaxItemsPerView="5000">
<Variable Name="i" InitialValue="0" />
<Size>count_bucket</Size>
<Loop>
<Item Name="{i}" Condition="list[i].count > 0">list[i]</Item>
<Exec>i++</Exec>
</Loop>
</CustomListItems>
</Expand>
</Type>
</AutoVisualizer>
Вставляю 2 элемента в хеш-таблицу
simList l;
l.add(10, 20);//(key,value)
l.add(0, 15);
l.add(0, 9);
Получаю
Имя Значение
l {size=3}
[size] 3
[count_bucket] 2
[0] {size=2}
[10] {size=1}
Надеюсь кому-нибудь да поможет.