我有一些可执行程序,对编译没有任何了解 用于构建它的标志(优化,调试信息等)
在其中,我有一个带有输入变量的函数,名为 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'}
这可能是优化问题吗?调试信息??
非常感谢任何帮助......谢谢!
答案 0 :(得分:1)
这可能是优化问题吗?
是
当您print values[0]
时,GDB会尝试在std::vector<unsigned char>::operator[](size_t)
找到要调用的函数。在非优化的情况下,GDB确实找到它,调用它并打印结果。在优化的情况下,函数已经内联,因此GDB可以使用的可执行文件中没有外部可调用的函数;因此Could not find operator[]
错误。