如何使用gdb“观察”C++动态数组?

12

请考虑以下示例:

int size = 10, *kk = new int[size];

for (int i = 0; i < size; i++) {
    kk[i] = i;
}

delete [] kk;
我怎样才能添加整个数组的监视器?我可以逐个添加监视器(kk[0]kk[1] ...),但是由于我知道数组的长度,有没有一种自动执行的方法呢?我的意思是类似于kk [0..size-1] 之类的东西。

我正在使用NetBeans IDE和cygwin g++和gdb。


1
俄罗斯人的修改略微改变了问题的意思,但表达式中的@<size>对于显示和打印命令都有效。 - Matt K
你想在GDB停止时观看它(读/写中断)还是打印它? - Ciro Santilli OurBigBook.com
在整个数组上观察(中断):https://dev59.com/cmgu5IYBdhLWcg3w4665 - Ciro Santilli OurBigBook.com
1个回答

12
尝试使用display *kk@<size>命令。从打印命令的文档中得知:

@是一种二进制运算符,用于将内存中任何连续数据对象视为数组。FOO@NUM给出一个数组,其第一个元素是FOO,第二个元素存储在FOO存储的位置之后的空间中,以此类推。FOO必须是一个值驻留在内存中的表达式。

请保留HTML标记。

我更喜欢使用 p 而不是 "display",因为打字更容易。我已经将其作为单独的答案添加在这里。 - Debajit
1
“print”和“display”不是同一个命令。“display”在变量作用域内设置一个监视器,以便每次获取提示时都能看到它。 - Matt K
@Matt,你说得对。我没有看到问题是关于观察变量的。我已经删除了误导性的答案。谢谢你指出来。 - Debajit
1
是的,问题的编辑实际上改变了意思。我应该把它改回来,这样我就不会看起来像个蠢货了。 - Matt K
@mkb,你是不是想说 display *kk@size?因为 size 是你想要使用的变量。 - Erik B
我实际上想使用数组的字面大小。我没有意识到你可以在那里使用变量。我引用的文档暗示需要使用文字。在回复之前,我没有阅读GDB手册中关于表达式的部分。 - Matt K

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接