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


144

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

Answers:


196

是的,很简单。说你有

char *a = new char[10];

在调试器中编写:

a,10

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


10
这是一个很好的技巧,但是如果您的指针指向一个结构数组,我发现在监视窗口中以“ a,10”展开的各个元素本身是不可扩展的。这意味着您无法使用此方法来挖掘数组的第三个元素。那是可以克服的吗?
SirPentor 2012年

@SirPentor我有同样的问题。您找到解决方案了吗?
becko 2012年

@becko-否定的。真令人沮丧
SirPentor

哇,它对结构没有用,您只能看到var的名称,而不是值
Icebone1000 2014年

2
对于初学者:如果选择“ a”变量,请右键单击并添加到监视列表(检查),如果在监视值列表中打开de debugger视图(我现在无法找到窗口的名称),则可以可以双击“ a”并将其重命名为“ a,X”,其中X是项数。您现在将看到所有值。
darkgaze '17

33

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

一种方法是使用“监视”窗口(调试/ Windows /监视)。添加手表=

m4x4,16

这会在列表中显示数据:

在此处输入图片说明

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

m4x4

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

在此处输入图片说明

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


21

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


10

再次访问:

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

double ** a; // assume 5*10

然后您可以在Visual Studio调试监视中编写以下代码:

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

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

double[5][10] a;

5

对于,

int **a; //row x col

将此添加到观看

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

请告诉我,我找不到“手表”。它在哪里?
Egor随机将

4

MSDN中,这里指定了另一种方法。

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

char *a = new char[10];

您可以使用以下命令在监视窗口中将其打印为unicode字符串:

a,su

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


1
通过您提供的MSDN链接- a,[10]即使您具有复杂数据类型的CArray,也可以查看单个元素,以便它们本身可以扩展。
LThode 2015年


1

您可以在文档的此gem中的监视窗口中找到许多可以使用变量执行的操作的列表:https : //msdn.microsoft.com/zh-cn/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)

0

我还没有找到将其用于多维数组的方法。但是您至少可以(如果知道所需条目的索引)将手表添加到特定值。只需使用索引运算符。

对于一个名为current的数组,该数组内部有一个名为Attribs的数组,其内部有一个名为Attrib的数组,如果必须放置26,它应该看起来像这样:

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

您也可以使用偏移量

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.