Display range of value using Natvis

302 Views Asked by At

I have an array (limit_array) which is pointed by a pointer (limit_ptr). For simplicity, here I have given an array of length 10. Using IndexListItems of natvis I can iterate through the value which is pointed by the pointer limit_ptr. But in some cases, I would not like to see all of the values, rather my preference is to observe a range of values (eg: index 4 to 6, that means 3 values). This one is achieved but I cannot change the index value in the debug window. The steps I have followed are given below

Sample code


int main()
{
    uint32_t limit_array[10];
    for(int i = 0; i < 10; i++)
    {
        limit_array[i] = i*5;
    }
    uint32_t *limit_ptr = limit_array;

    return 0;
}

natvis file

<?xml version="1.0" encoding="utf-8"?>
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
    <Type Name="uint32_t *">
      <DisplayString>Would like to observe limited or preferred ranged value</DisplayString>
      <Expand>
        <IndexListItems>
          <Size>10</Size>
          <ValueNode>limit_ptr[$i]</ValueNode>
        </IndexListItems>
      </Expand>
    </Type>
</AutoVisualizer>

Here, in Size tag I have used the length of the array.

The following output I can see in the Debug window enter image description here

What would like to achieve

I have tried to display limited range of values. For example from index 4 to 6 I need to display. Modified natvis file as like as follows:

<?xml version="1.0" encoding="utf-8"?>
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
    <Type Name="uint32_t *">
      <DisplayString>Would like to observe limited or preferred ranged value</DisplayString>
      <Expand>
        <IndexListItems>
          <Size>3</Size>
          <ValueNode>limit_ptr[$i+4]</ValueNode>
        </IndexListItems>
      </Expand>
    </Type>
</AutoVisualizer>

But I have got the output as like as follows where I can see my preferred value 20, 25, 30 but in a wrong index (still in [0] [1] [2]). My desire is to see them in [4] [5] [6].

enter image description here

Is it possible by Natvis to observe at [4] [5] [6] index or it is a default behavior of VSCode Debugger always to display index value 0 even if it points to another index? If there is any workaround to achieve my goal would be great.

0

There are 0 best solutions below