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

时间:2008-09-16 18:04:40

标签: c++ c visual-studio debugging

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

9 个答案:

答案 0 :(得分:184)

是的,简单。 说你有

char *a = new char[10];

在调试器中写入:

a,10

会向您展示内容,就像它是一个数组一样。

答案 1 :(得分:32)

有两种方法可以查看数组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
};

一种方法是使用Watch窗口(Debug / Windows / Watch)。添加watch =

m4x4,16

这会在列表中显示数据:

enter image description here

另一种方法是使用Memory窗口(Debug / Windows / Memory)。指定内存起始地址=

m4x4

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

enter image description here

右键单击“内存”窗口以确定二进制数据的可视化方式。选择仅限于整数,浮点数和一些文本编码。

答案 2 :(得分:21)

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

答案 3 :(得分:10)

再次访问:

让我们假设你有一个指针:

double ** a; // assume 5*10

然后您可以在Visual Studio调试监视器中编写以下内容:

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

将其转换为如下所示的数组,您可以一次查看所有内容。

double[5][10] a;

答案 4 :(得分:5)

有关,

int **a; //row x col

将此添加到观看

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

答案 5 :(得分:4)

另一种方法是在MSDN中指定。

简而言之,您可以将字符数组显示为几种类型的字符串。如果你有一个声明为:

的数组
char *a = new char[10];

您可以在观察窗口中将其打印为unicode字符串,其中包含以下内容:

a,su

请参阅MSDN页面上的表格,了解所有可能的转换,因为有很多不同的转换。许多不同的字符串变体,用于打印数组中各个项目的变体等等。

答案 6 :(得分:1)

对于MFC阵列(CArray,CStringArray,...) 按照提示#4中的下一个链接

http://www.codeproject.com/Articles/469416/10-More-Visual-Studio-Debugging-Tips-for-Native-De

例如,对于“CArray pArray”,请在Watch窗口中添加

     pArray.m_pData,5 

查看前5个元素。

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

     pArray.m_pData[x].m_pData,y

答案 7 :(得分:1)

您可以在文档中的此gem中的观察窗口中找到可以使用变量执行的许多操作的列表: 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)

答案 8 :(得分:0)

我还没有找到一种方法来使用多维数组。但您至少可以(如果您知道所需条目的索引)将监视添加到特定值。只需使用index-operator。

对于一个名为current的数组,其中有一个名为Attribs的数组,里面有一个名为Attrib的数组,如果你想要位于第26位,它应该是这样的:

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

您也可以使用偏移量

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

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