GDB不能索引到数组并打印值
gdb cannot index into an array and print value
我有一个类型为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
相关文章:
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 在一定长度后从数组中打印时缺少整数
- 数组元素打印的递归方法
- C++ 无法在字符数组中使用 for 循环打印字母模式
- 打印矢量数组中的所有元素
- 打印问题.我在数组中打印值时遇到一些问题
- 数组类 阵列的打印输出
- 动态分配的聊天数组打印缺失的数据和空
- 如何打印 2D 字符数组C++
- 如何修改代码以打印出数组 v2
- 在C++中初始化和打印 2D 数组
- 将浮点数转换为无符号字符数组并打印出来
- C++ 打印包含数据结构的数组
- 如何让字符数组在一行而不是多行中打印出来?
- 打印字符数组地址的正确方法
- 按字母顺序打印存储在字符数组中的信息
- 使用递归反转和打印出数组的内容
- 如何将文本文件读取到二维数组中并以 c++ 打印
- 如何在运行时在对象数组中动态追加新对象C++并打印它们
- 加载有空指针的字符数组的打印值