152

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

4

9 回答 9

210

是的,很简单。说你有

char *a = new char[10];

在调试器中编写:

a,10

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

于 2008-09-16T18:06:26.743 回答
35

查看数组 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

这将在列表中显示数据:

在此处输入图像描述

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

m4x4

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

在此处输入图像描述

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

于 2014-09-05T16:25:10.973 回答
23

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

于 2008-09-16T18:06:29.817 回答
10

重访:

假设您有一个以下指针:

double ** a; // assume 5*10

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

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

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

double[5][10] a;
于 2014-03-07T01:29:11.763 回答
7

为了,

int **a; //row x col

添加此观看

(int(**)[col])a,row
于 2015-08-09T04:28:36.017 回答
4

在MSDN中指定了另一种方法来执行此操作。

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

char *a = new char[10];

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

a,su

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

于 2015-03-10T20:12:17.810 回答
2

您可以在文档中的此 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)
于 2015-08-07T07:44:30.130 回答
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
于 2014-01-08T15:38:08.137 回答
0

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

对于一个名为 current 的数组,其中有一个名为 Attribs 的数组,其中有一个名为 Attrib 的数组,如果您希望必须定位到 26,它应该如下所示:

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

您也可以使用偏移量

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

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

于 2012-09-18T12:45:20.787 回答