gdb无法索引到数组和打印值

时间:2016-08-09 02:29:20

标签: c++ debugging gdb

我有a类型的对象vector<char>。我知道这是10个元素长。但是,当我在gdb中p a[5]时,我收到一条错误消息,指出gdb无法解析符号operator[]

void foo()
{
    vector<char> a (10, 10); // put a breakpoint here.
}

你能否建议我在gdb中打印索引值的方法?现在,我做了一些非常蹩脚的事 -

char c1=a[1]; char c2 = a[2]; char c3 = a[3]; // ... so on and forth

我可以信任c1c2

中的值吗?

P.S。我用DEBUG符号构建了我的代码。

2 个答案:

答案 0 :(得分:1)

这适用于gdb 7.11.1

没有问题
(gdb) b main
Breakpoint 1 at 0x400bd3: file t.C, line 6.
(gdb) run
Starting program: /tmp/t 
Missing separate debuginfos, use: dnf debuginfo-install glibc-2.23.1-8.fc24.x86_64

Breakpoint 1, main () at t.C:6
6       std::vector<char> a={'a','b','c','d','e','f'};
Missing separate debuginfos, use: dnf debuginfo-install libgcc-6.1.1-3.fc24.x86_64 libstdc++-6.1.1-3.fc24.x86_64
(gdb) n
8       std::cout << "Ok" << std::endl;
(gdb) p a
$1 = std::vector of length 6, capacity 6 = {97 'a', 98 'b', 99 'c', 100 'd', 
  101 'e', 102 'f'}
(gdb) p a[2]
$2 = 99 'c'

这里的答案是更新到当前版本的gcc和gdb。

答案 1 :(得分:1)

向量与数组或指针不同。向量通常具有指向开头的指针,您可以使用该指针来访问元素。试试这样的事情

p *(a._M_impl._M_start+5)

这里我正在访问指向数组开头的指针,添加5以获取索引为5的元素。