Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无法计算函数--可能是内联函数_C++_Gdb - Fatal编程技术网

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的定义放在类体中,并且它足够小,因此,首先,编译器内联了这个函数——这意味着,编译将用其定义替换此函数调用的所有外观,并且此函数的任何定义都不会出现在可执行文件中。第二,你并没有在你的程序中真正调用这个函数,所以事实上,这个函数在你的最终可执行文件中根本不存在

要解决这个问题:

  • 可以将func的定义放在类主体之外
  • 在程序中的任意位置调用func

  • 尝试此操作以避免内联函数。^可能与添加到此答案重复,您可以在具有
    \uuuu属性((noinline))\uuuu
    的特定函数上禁用它。还有
    -fno内联小函数
    ,IIRC。此外,如果您仍然需要一些优化,那么函数内联也不会使用
    -O1
    启用。在这种情况下,添加-fno内联函数并不能解决问题。先用你的编译器试试,然后发布你的答案。@nicky_zs,它对我来说可以使用-O0或-fno内联函数。@bytbox,真的吗?你在代码中调用函数func了吗?我尝试过这样做:如果我没有在代码中调用此函数,-fno内联函数不起作用。若要防止链接器删除未调用的函数,请添加
    \uu属性\((已使用))