无法评估功能 - 可能内联

时间:2014-03-04 05:34:04

标签: c++ gdb

我写了一个与此类似的函数:

class abc {
    private :
    int m_var ;
    public :
    int func() { return m_var ; }
};

当我尝试使用func()中的abc对象指针打印gdb时,它会给出错误:

**Cannot evaluate function -- may be inlined**

如何从内联函数中打印值?

2 个答案:

答案 0 :(得分:10)

你得到这个错误,因为你把func的定义放在类体中并且它足够小,所以,首先,编译器内联这个函数----这意味着,编译将用它的函数替换这个函数调用的所有外观定义,并且此函数的定义将不在可执行文件中。其次,你并没有真正在你的程序中调用该函数,所以实际上,这个函数永远不会存在于你的最终可执行文件中!

要解决这个问题:

  1. 您可以将func的定义放在类体外。
  2. 在您的程序中随处调用func。

答案 1 :(得分:7)

当函数内联时,它在可执行文件中不会显示为正确的符号,因此gdb无法执行它。最简单的事情可能是通过-fno-inline-functions或(更好)-O0禁用函数内联进行编译。