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

===============>>#1 票数:188 已采纳

是的,很简单。 说你有

char *a = new char[10];

在调试器中编写:

a,10

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

===============>>#2 票数: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
};

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

m4x4,16

这会在列表中显示数据:

在此处输入图片说明

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

m4x4

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

在此处输入图片说明

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

===============>>#3 票数:21

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

===============>>#4 票数:10

再次访问:

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

double ** a; // assume 5*10

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

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

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

double[5][10] a;

===============>>#5 票数:5

对于,

int **a; //row x col

将此添加到观看

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

===============>>#6 票数:4

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

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

char *a = new char[10];

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

a,su

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

===============>>#7 票数:1

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

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

===============>>#8 票数: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)

===============>>#9 票数:0

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

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

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

您也可以使用偏移量

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

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

  ask by Adam Rosenfield translate from so

未解决问题?本站智能推荐:

1回复

使用Visual Studio的调试器打印链接列表的内容

我有一个崩溃转储。 此故障转储包含一个双向链表,其中包含15000个节点,其头指针为空,但仍具有有效尾部。 为了弄清楚磁头指针是否被逻辑错误或堆损坏消除了,我需要从尾部向后走,直到第一个有效节点。 如果我可以到达第一个有效节点,即应该跟随头部的节点,并且它没有指向null,我可以合理地
1回复

在Visual Studio C中进行调试时跳出for循环功能

我想编辑文件的某些位。 我打开文件并确定第一个字节指针。 因此,在ChangeBit函数中,将某些位替换为1s。 当我想调试ChangeBit函数时,在for循环的第一次迭代中,调试游标从函数中跳出,进程不会终止,并且代码在函数之后继续行。 怎么了? 指针有问题吗?
1回复

在Visual Studio中进行调试-我可以看到Intel Compiler库代码吗?

我将Visual Studio 2012与Intel C / C ++编译器配合使用,并进入以下行: 然后,我看到如下代码: 是Intel编译器对new()的定义? 如我所见,英特尔在通过我的应用进行调试时如何实现C ++标准? 我怎么能看到malloc.c(而不是mal
2回复

Visual Studio令人困惑的异常

对于我要参加的机器人课程,我们必须从http://www.cs.okstate.edu/~katchou/vboost.cpp下载代码,并将其放入同名项目中。 当我调试程序时(通过在发布模式下导航到Debug> StartDebugging),我收到一条错误消息: 停止调试过程后
2回复

是否保证格式错误的C或C ++程序在Visual Studio中的DEBUG配置下崩溃

在我过去在Visual Studio中使用RELEASE配置在C和某些C ++上进行编码的许多时候,我遇到了一些滑溜的bug,这些漏掉了我的视线,并且该代码尽管调用了未定义的行为,但似乎可以正常工作。 但是,经过几次运行后,很明显该程序由于不同的异常结果和/或崩溃而出现了错误。 因此,我
2回复

Visual Studio中所谓的“框架”是什么?

在Visual Studio的“调用堆栈”窗口中,它报告: Frames是什么意思,为什么缺少符号可能会导致它不正确?AFAIK,符号仅用于调试信息,缺少符号只会使源不可见。
1回复

调试Visual C ++复杂项目

我正在研究一个有点复杂的项目,我想知道是否可以调试一部分代码而不是整个应用程序,因为它太慢了。 就像我写一些行和代码,进行编译,然后告诉调试器从哪里开始执行并手动分配变量值。
3回复

我可以从Visual Studio立即窗口调用Win32 API吗?

我正在调试一个C ++ Win32应用程序,我想从该进程的上下文中调用一个任意的Win32 API,就好像该程序运行了这行代码: 但是进入立即窗口会进入: 编辑:使用函数的全名, {,,user32.dll}_NtUserDestroyWindow@4 ,我可以让立即窗口了解我的
5回复

在Visual Studio调试器中查看数组? [重复]

这个问题在这里已有答案: 如何在Visual Studio调试器中显示动态分配的数组? 9个答案 是否可以在Visual Studio调试器中查看数组? QuickWatch仅显示数组的第一个元素。
1回复

通过C中的调用进入Visual Studio调试器

我有一种情况,我想使用函数调用进入调试器。 我知道它的存在是因为我在MSDN上看到了对它的引用。 但是我已经搜索了,但是现在找不到了。 那么,从C进入调试器的函数调用是什么? 我正在使用Visual Studio Express 2013。 谢谢