如何在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个元素)。