c++ - 在 Visual Studio 2019 C++ 中,如何扩展动态分配的数组以显示其所有元素?

标签 c++ debugging visual-studio-2019 stdvector debuggervisualizer

我已经为 vector 类编写了一个简单的(并且可能很糟糕)实现,类似于 std::vector。

这是类:

template <class T>
class Vector
{
    T* data;
    int size;
public:
    Vector(int = 0);
    ~Vector();

    Vector(const Vector<T>&);
    
    Vector<T>& operator=(Vector<T>);
    T& operator[](int);

    friend void swap(Vector<T>&, Vector<T>&);

    void Clear();
    void Insert(T, int);
    void Delete(int);
    int Size();
};

在调试使用我的 vector 的代码时,我注意到我在内部使用的指针通常只会扩展到第一个元素。

我发现了这个 SO 问题,How to display a dynamically allocated array in the Visual Studio debugger? ,这似乎为问题提供了一个简单的解决方案,但我想知道是否有可能将数组扩展一个非常量(例如,当前 vector 大小)。

考虑到 std::vector 确实在调试器中正常显示它的所有元素,我是否可以重写我的 vector 以包含该功能?

这是带有一些测试变量的“本地”选项卡的片段,以显示我所指的内容:

最佳答案

我似乎找到了如何使用 .natvis 文件执行此操作。

本文提供了有关 Natvis 文件的更多详细信息: https://learn.microsoft.com/en-us/visualstudio/debugger/create-custom-views-of-native-objects?view=vs-2019

将 .natvis 文件添加到您的项目允许您指定容器在 Locals 中的显示方式。

这是原始帖子中描述的 Vector 容器的一个简单示例:

<?xml version="1.0" encoding="utf-8"?> 
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
  <Type Name="AC::Vector&lt;*&gt;">
    <DisplayString>{{ size={size} }}</DisplayString>
    <Expand>
      <Item Name="[size]" ExcludeView="simple">size</Item>
      <ArrayItems>
        <Size>size</Size>
        <ValuePointer>data</ValuePointer>
      </ArrayItems>
    </Expand>
  </Type>

</AutoVisualizer>

创建文件并启动调试 session 后,容器现在可以正确显示其内容:

AC::Vector<int> myVec(3);
myVec[0] = 1;
myVec[1] = 2;
myVec[2] = 3;

本地人:

enter image description here

关于c++ - 在 Visual Studio 2019 C++ 中,如何扩展动态分配的数组以显示其所有元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61117151/

相关文章:

python - Python 如何从 C 函数接收字符串?

c++ - 3D 数组到 3D std::vector

c++ - 何时链接,何时包含?

delphi - 调试 Windows CGI 的最佳方法

ios - Apple Mach O 链接器错误

visual-studio - 弄清楚 Visual Studio 使用的 Windows SDK

code-coverage - 无法使用 Visual Studio 2019 分析代码覆盖率

c++ - C++中的线程池 - 如何结束程序

.net - "The breakpoint will not currently be hit. The source code is different from the original version."这是什么意思?

c++ - 更改 volatile const 的值 - G++ 与 Visual Studio 2019