如何在调试模式下查看动态分配内存的值?

时间:2011-12-02 15:29:42

标签: c eclipse netbeans

我正在使用eclipse和netbeans for c,我想检查在我调试时在内存中动态分配的变量的值(在 eclipse 和< EM> netbeans的)。

由于某种原因,我只能看到指针本身的值,它是第一个项目。

用以下代码说明:

int foo[10];

我可以稍后检查整个数组的值(调试时)。 例如,我可以在观察窗口中查看foo [7]的值。

但使用此代码:

int *bar = malloc(10*sizeof(int));

我只能查看bar所指向的位置以及bar[0]的值(而不是其他值)。

我怎样才能观察阵列的所有值?


更新:eclipse和netbeans都解决了这个问题。

在eclipse中

:右键单击 Variables 窗口中的所需变量 - &gt;选择显示为数组 - &gt;填写起始索引和数组长度。

netbeans中的

:在 Watches 窗口中添加一个具有以下格式的新手表:

*((bar)+0)@10

其中bar应该是指针名称, 0应该是您的起始索引 10应该是它的长度

如果我可以添加个人内容:这是我在 stackoverflow 上的第一条消息。我希望你发现它很有用。

2 个答案:

答案 0 :(得分:3)

当你使用指针变量时,调试工具可以自动推断的唯一知识就是你有一个整数值的地址。在这个事实之后,理论上你可以在整数值后面有任何东西,工具不可能猜测指针实际上是整数数组的第一个元素。

也就是说,你可以尝试添加一个自定义监视表达式(至少在Eclipse上,我不知道netbeans),它将你的指针转换为整数数组。我不知道你是否可以使用精确的数组长度进行投射。 类似(int[])bar之类的东西肯定会有用,但也许这种形式可能有效(int[10])bar

另一种解决方案是直接查看指针地址处的内存视图,但将原始字节序十六进制输出转换为整数值更为精神上的运动......

现在,如果指针始终分配给10个整数的内存块,则最好考虑使用数组形式int bar[10];静态分配它

答案 1 :(得分:2)

我不知道它是否适用于Eclipse或Netbeans,但您可以尝试在*(bar + 1)上为第二个“条目”添加一个监视。但是,您可能无法将bar用作数组,除非调试器允许您将其类型转换为数组(如(int[])bar,我不知道它是否甚至可以在实际C中工作)。 / p>