我在 ubuntu 14.04 中构建了带有 python 支持的 gdb-7.12,并启用了漂亮的打印并通过以下方式配置了我的 gdbinit 文件https://sourceware.org/gdb/wiki/STLSupport。
但每当我打印任何容器的大小时:
p ivec.size()
Cannot evaluate function -- may be inlined
这是我正在使用的 MCVE
#include <vector>
using namespace std;
int main(){
vector<int> ivec;
return 0;
}
我尝试过不同的编译选项
g++-6 -g -O0 -fno-inline-functions -gdwarf-2 Source.cpp --std=c++14
事实上,我已经尝试了上述选项的所有组合,但总是遇到同样的问题。
我尝试切换到 gdb-7.11 (也是从源代码构建)以查看它是否解决了问题,并且还切换到了 g++-4.8,但它们似乎都没有解决问题。
我究竟做错了什么?您提供选项是否有特定的顺序?有没有办法检查 -O0 选项是否有效?
答案1
您必须调用 vector::size(),以便编译该函数。它不会被编译,因为这是一个类模板。我认为调用也应该在相同的上下文中,但我对此不确定。