我写了一个与此类似的函数:
class abc {
private :
int m_var ;
public :
int func() { return m_var ; }
};
当我尝试使用func()
中的abc
对象指针打印gdb
时,它会给出错误:
**Cannot evaluate function -- may be inlined**
如何从内联函数中打印值?
答案 0 :(得分:10)
你得到这个错误,因为你把func的定义放在类体中并且它足够小,所以,首先,编译器内联这个函数----这意味着,编译将用它的函数替换这个函数调用的所有外观定义,并且此函数的定义将不在可执行文件中。其次,你并没有真正在你的程序中调用该函数,所以实际上,这个函数永远不会存在于你的最终可执行文件中!
要解决这个问题:
答案 1 :(得分:7)
当函数内联时,它在可执行文件中不会显示为正确的符号,因此gdb无法执行它。最简单的事情可能是通过-fno-inline-functions
或(更好)-O0
禁用函数内联进行编译。