lundi 4 novembre 2019

How can I make my class as debug friendly as std::array and std::vector in Visual Studio?

I want to make gsl::span to be as debug friendly as std::vector/std::array, in the Visual Studio debugging environment.

Here is what I mean.

Given this code

    struct custom_class
    {
        custom_class(std::vector<int> & foo) : ptr(foo.data()), length(foo.size())
        {}

        int* ptr;
        size_t length;
    };



    void vector_example()
    {
        std::vector<int> vector_foo = { 0,1,3,4,5,6,3,2 };

        std::array<int, 8> array_foo = { 0,1,3,4,5,6,3,2 };

        gsl::span<int> span_foo(vector_foo);

        custom_class custom_class_foo(vector_foo);

        std::cout << "How can I make my class as debug friendly as std::array and std::vector?" << "\n";
    }

The debugger is able to visual std::vector/array like this:

std::array

-       array_foo   { size=8 }  std::array<int,8>
        [0] 0   int
        [1] 1   int
        [2] 3   int
        [3] 4   int
        [4] 5   int
        [5] 6   int
        [6] 3   int
        [7] 2   int
+       [Raw View]  {_Elems=0x000000654696f368 {0, 1, 3, 4, 5, 6, 3, 2} }   std::array<int,8>

std::vector

-       vector_foo  { size=8 }  std::vector<int,std::allocator<int>>
        [capacity]  8   __int64
+       [allocator] allocator   std::_Compressed_pair<std::allocator<int>,std::_Vector_val<std::_Simple_types<int>>,1>
        [0] 0   int
        [1] 1   int
        [2] 3   int
        [3] 4   int
        [4] 5   int
        [5] 6   int
        [6] 3   int
        [7] 2   int
+       [Raw View]  {_Mypair=allocator }    std::vector<int,std::allocator<int>>

But when I look at std::span and my own custom class, I can't look past the first indice in the debugger

Custom Class

-       custom_class_foo    {ptr=0x0000015f50e3c340 {0} length=8 }  `anonymous-namespace'::custom_class
-       ptr 0x0000015f50e3c340 {0}  int *
            0   int
        length  8   unsigned __int64

gsl::span

-       span_foo    {storage_={data_=0x000001f5bb2fdc20 {0} } } gsl::span<int,-1>
-       storage_    {data_=0x000001f5bb2fdc20 {0} } gsl::span<int,-1>::storage_type<gsl::details::extent_type<-1>>
-       gsl::details::extent_type<-1>   {size_=8 }  gsl::details::extent_type<-1>
        size_   8   __int64
-       data_   0x000001f5bb2fdc20 {0}  int *
            0   int

Aucun commentaire:

Enregistrer un commentaire