如何在 VisualStudio 调试器中显示动态分配的数组?

如果有静态分配的数组,则 VisualStudio 调试器可以轻松显示所有数组元素。但是,如果动态地分配了一个数组,并由一个指针指向该数组,那么当您单击 + 来展开该数组时,它将仅显示该数组的第一个元素。有没有一种简单的方法告诉调试器,显示这个数据作为一个类型 Foo 和 X 大小的数组?

66097 次浏览

是的,很简单。 说你见过

char *a = new char[10];

在调试器中写入:

a,10

会像显示数组一样显示内容。

在监视窗口中,在数组名称和要显示的项目数量后面添加逗号。

我还没有找到在多维数组中使用它的方法。但是您至少可以(如果您知道所需条目的索引)为特定值添加一个 watch。只需使用 index 操作符。

对于一个名为 current 的 Array,其中包含一个名为 Attribs 的 Array,其中包含一个名为 Attrib 的 Array,如果你想要定位26,它应该是这样的:

((*((*current).Attribs)).Attrib)[26]

也可以使用偏移量

((*((*current).Attribs)).Attrib)+25

将显示一个“下一个”25个元素。 (我使用的是 VS2008,它最多只显示25个元素)。

用于 MFC 数组(CArray,CStringArray,...) 跟随技巧 # 4中的下一个链接

Http://www.codeproject.com/articles/469416/10-more-visual-studio-debugging-tips-for-native-de

例如,对于“ CArray pArray”,添加监视窗口

     pArray.m_pData,5

看看前5个元素。

如果 pArray 是一个二维 CArray,你可以使用下面的语法查看第二维的任何元素:

     pArray.m_pData[x].m_pData,y

重温:

假设你有一个下面的指针:

double ** a; // assume 5*10

然后您可以在 VisualStudio 调试手表中编写以下内容:

(double(*)[10]) a[0],5

它会像下面这样转换成一个数组,你可以一次查看所有内容。

double[5][10] a;

查看数组 m4x4中的数据有两种方法:

float m4x4[16]={
1.f,0.f,0.f,0.f,
0.f,2.f,0.f,0.f,
0.f,0.f,3.f,0.f,
0.f,0.f,0.f,4.f
};

一种方法是使用“监视”窗口(Debug/Windows/Watch)

m4x4,16

这将在列表中显示数据:

enter image description here

另一种方法是使用内存窗口(Debug/Windows/Memory)

m4x4

这将在表中显示数据,这对于二维和三维矩阵更好:

enter image description here

右键单击 Memory 窗口以确定如何可视化二进制数据。选择仅限于整数、浮点数和一些文本编码。

还有一种方法在 MSDN中指定。

简而言之,可以将字符数组显示为几种类型的字符串:

char *a = new char[10];

你可以在手表窗口中以 Unicode 字符串的形式打印它,如下所示:

a,su

有关所有可能的不同转换,请参见 MSDN 页面上的表格,因为有相当多的转换。许多不同的字符串变体,用于在数组中打印单个项的变体,等等。

你可以在这个 gem 文档的 watch 窗口中找到一个列表,上面列出了你可以用变量做的很多事情: Https://msdn.microsoft.com/en-us/library/75w45ekt.aspx

对于变量 a,在其他答案中已经提到了

a,10
a,su

但是还有很多其他的格式和尺寸说明,比如:

a,en (shows an enum value by name instead of the number)
a,mb (to show 1 line of 'memory' view right there in the watch window)

因为,

int **a; //row x col

把这个加进去看

(int(**)[col])a,row