在gdb中访问向量的向量

时间:2017-06-19 12:19:57

标签: debugging vector gdb

我有一些可执行程序,对编译没有任何了解 用于构建它的标志(优化,调试信息等)

在其中,我有一个带有输入变量的函数,名为 values (通过引用传递):

void F(std::vector<std::vector<unsigned char> > &values) { // ... }

我使用gdb将打印到控制台:

(gdb) print values

我明白了:

$15 = std::vector of length 1, capacity 1 = {std::vector of length 4, capacity 4 = {0 '\000', 0 '\000', 50 '2', 0 '\000'}}

即,大小为1的向量,保持大小为4的向量。

当我尝试使用gdb:

访问内部大小4向量时
(gdb) print values[0]

我明白了:

Could not find operator[].

然而,当我编译和调试一个简单的&#34; hello矢量world&#34;时,无优化 -ggdb flag

(gdb) print values

我明白了:

$2 = std::vector of length 1, capacity 1 = {std::vector of length 3, capacity 3 = {48 '0', 49 '1', 50 '2'}}

当我尝试使用:

访问内部向量时
(gdb) print values[0]

一切都很好:

$3 = std::vector of length 3, capacity 3 = {48 '0', 49 '1', 50 '2'}

这可能是优化问题吗?调试信息??

非常感谢任何帮助......谢谢!

1 个答案:

答案 0 :(得分:1)

  

这可能是优化问题吗?

当您print values[0]时,GDB会尝试在std::vector<unsigned char>::operator[](size_t)找到要调用的函数。在非优化的情况下,GDB确实找到它,调用它并打印结果。在优化的情况下,函数已经内联,因此GDB可以使用的可执行文件中没有外部可调用的函数;因此Could not find operator[]错误。