GDB不能索引到数组并打印值

gdb cannot index into an array and print value

本文关键字:打印 数组 不能 索引 GDB      更新时间:2023-10-16

我有一个类型为vector<char>的对象a。我知道它有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等的值吗

注:我已经用DEBUG符号构建了我的代码。

vector不同于数组或指针。vector通常有一个指向开始的指针,可以使用该指针访问元素。试试这样写

p *(a._M_impl._M_start+5)

这里我访问的是指向数组开头的指针,加上5来获得索引为5的元素

在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