如何在Visual Studiodebugging器中显示一个dynamic分配的数组?

如果您有一个静态分配的数组,Visual Studiodebugging器可以轻松显示所有数组元素。 但是,如果您有一个dynamic分配的数组,并且指针指向一个数组,那么当您单击+展开数组时,它将只显示该数组的第一个元素。 有没有一种简单的方法来告诉debugging器,让我看看这个数据是一个Footypes的数组,并且大小为X?

是的,很简单。 说你有

char *a = new char[10]; 

在debugging器中写入:

 a,10 

会显示内容,就好像它是一个数组。

有两种方法可以查看数组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)。 添加手表=

 m4x4,16 

这将在列表中显示数据:

在这里输入图像说明

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

 m4x4 

这将在一个表格中显示数据,这对于二维和三维matrix更好:

在这里输入图像说明

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

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

重温:

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

 double ** a; // assume 5*10 

那么你可以在Visual Studio下面写下debugging手表:

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

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

 double[5][10] a; 

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

总之,可以将字符数组显示为几种types的string。 如果你有一个数组声明为:

 char *a = new char[10]; 

您可以在监视窗口中将其作为unicodestring打印,具体如下:

 a,su 

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

对于,

 int **a; //row x col 

添加此观看

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

对于提示#4中的下一个链接之后的MFC数组(CArray,CStringArray,…)

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 

您可以在文档中的这个gem的监视窗口中find许多variables的列表: https : //msdn.microsoft.com/en-us/library/75w45ekt.aspx

对于variablesa来说,其他答案中已经提到过

 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) 

我还没有find一种方法来使用multidimensional array。 但是,至less可以(如果您知道所需条目的索引)将手表添加到特定的值。 只需使用索引运算符。

对于一个名为current的数组,里面有一个名为Attribs的数组,里面有一个名为Attrib的数组,它应该看起来像这样,如果你想定位26:

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

你也可以使用偏移量

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

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