在 Visual Studio 2019 C++ 中,如何扩展动态分配的数组以显示其所有元素?
In Visual Studio 2019 C++, how can I expand a dynamically allocated array so that all of its elements are displayed?
我已经为向量 class 编写了一个简单的(并且可能很糟糕)实现,类似于 std::vector。
这里是 class:
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();
};
调试使用我的向量的代码时,我注意到我在内部使用的指针通常只会扩展到第一个元素。
我发现了这个 SO 问题,How to display a dynamically allocated array in the Visual Studio debugger?,它似乎提供了一个简单的问题解决方案,但我想知道是否可以将数组扩展一个非常量(比如,当前矢量大小)。
考虑到 std::vector 确实在调试器中正常显示了它的所有元素,我是否可以重写我的矢量以包含该功能?
这是带有一些测试变量的“本地”选项卡的片段,以显示我所指的内容:
我似乎找到了使用 .natvis 文件执行此操作的方法。
本文提供了有关 Natvis 文件的更多详细信息:
https://docs.microsoft.com/en-us/visualstudio/debugger/create-custom-views-of-native-objects?view=vs-2019
将 .natvis 文件添加到您的项目允许您指定容器在 Locals 中的显示方式。
下面是原文中描述的Vector容器的一个简单例子post:
<?xml version="1.0" encoding="utf-8"?>
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
<Type Name="AC::Vector<*>">
<DisplayString>{{ size={size} }}</DisplayString>
<Expand>
<Item Name="[size]" ExcludeView="simple">size</Item>
<ArrayItems>
<Size>size</Size>
<ValuePointer>data</ValuePointer>
</ArrayItems>
</Expand>
</Type>
</AutoVisualizer>
创建文件并启动调试会话后,容器现在可以正确显示其内容:
AC::Vector<int> myVec(3);
myVec[0] = 1;
myVec[1] = 2;
myVec[2] = 3;
当地人:
我已经为向量 class 编写了一个简单的(并且可能很糟糕)实现,类似于 std::vector。
这里是 class:
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();
};
调试使用我的向量的代码时,我注意到我在内部使用的指针通常只会扩展到第一个元素。
我发现了这个 SO 问题,How to display a dynamically allocated array in the Visual Studio debugger?,它似乎提供了一个简单的问题解决方案,但我想知道是否可以将数组扩展一个非常量(比如,当前矢量大小)。
考虑到 std::vector 确实在调试器中正常显示了它的所有元素,我是否可以重写我的矢量以包含该功能?
这是带有一些测试变量的“本地”选项卡的片段,以显示我所指的内容:
我似乎找到了使用 .natvis 文件执行此操作的方法。
本文提供了有关 Natvis 文件的更多详细信息: https://docs.microsoft.com/en-us/visualstudio/debugger/create-custom-views-of-native-objects?view=vs-2019
将 .natvis 文件添加到您的项目允许您指定容器在 Locals 中的显示方式。
下面是原文中描述的Vector容器的一个简单例子post:
<?xml version="1.0" encoding="utf-8"?>
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
<Type Name="AC::Vector<*>">
<DisplayString>{{ size={size} }}</DisplayString>
<Expand>
<Item Name="[size]" ExcludeView="simple">size</Item>
<ArrayItems>
<Size>size</Size>
<ValuePointer>data</ValuePointer>
</ArrayItems>
</Expand>
</Type>
</AutoVisualizer>
创建文件并启动调试会话后,容器现在可以正确显示其内容:
AC::Vector<int> myVec(3);
myVec[0] = 1;
myVec[1] = 2;
myVec[2] = 3;
当地人: