C++ 无法计算函数--可能是内联函数
我写了一个类似的函数:C++ 无法计算函数--可能是内联函数,c++,gdb,C++,Gdb,我写了一个类似的函数: class abc { private : int m_var ; public : int func() { return m_var ; } }; 当我试图在gdb中使用abc对象指针打印func()时,它给出了错误: **无法计算函数--可能是内联的** 如何从内联函数打印值?当函数内联时,它在可执行文件中不会显示为正确的符号,因此gdb无法执行它。最简单的方法可能是在禁用函数内联的情况下进行编译,无论是通过-fno内联函数还是(更
class abc {
private :
int m_var ;
public :
int func() { return m_var ; }
};
当我试图在gdb
中使用abc
对象指针打印func()
时,它给出了错误:
**无法计算函数--可能是内联的**
如何从内联函数打印值?当函数内联时,它在可执行文件中不会显示为正确的符号,因此gdb无法执行它。最简单的方法可能是在禁用函数内联的情况下进行编译,无论是通过
-fno内联函数
还是(更好的)-O0
,您都会遇到这个错误,因为您将func的定义放在类体中,并且它足够小,因此,首先,编译器内联了这个函数——这意味着,编译将用其定义替换此函数调用的所有外观,并且此函数的任何定义都不会出现在可执行文件中。第二,你并没有在你的程序中真正调用这个函数,所以事实上,这个函数在你的最终可执行文件中根本不存在
要解决这个问题:
尝试此操作以避免内联函数。^可能与添加到此答案重复,您可以在具有
\uuuu属性((noinline))\uuuu
的特定函数上禁用它。还有-fno内联小函数,IIRC。此外,如果您仍然需要一些优化,那么函数内联也不会使用-O1
启用。在这种情况下,添加-fno内联函数并不能解决问题。先用你的编译器试试,然后发布你的答案。@nicky_zs,它对我来说可以使用-O0或-fno内联函数。@bytbox,真的吗?你在代码中调用函数func了吗?我尝试过这样做:如果我没有在代码中调用此函数,-fno内联函数不起作用。若要防止链接器删除未调用的函数,请添加\uu属性\((已使用))
。