禁用优化后,gdb stl 函数仍然显示为内联

禁用优化后,gdb stl 函数仍然显示为内联

我在 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(),以便编译该函数。它不会被编译,因为这是一个类模板。我认为调用也应该在相同的上下文中,但我对此不确定。

相关内容