我有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
我可以信任c1
,c2
等
P.S。我用DEBUG符号构建了我的代码。
答案 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的元素。