可以在gdb中调用内联函数和/或使用GCC发出它们吗?

Joh*_*nck 6 c c++ debugging gdb inline-functions

我们都知道内联函数可以使调试变得更加棘手,因为它们可以从堆栈跟踪等中省略.但是假设我想从gdb中调用内联函数,并且我知道它的名称及其参数.我想我应该能够做到这一点,但我得到了这个:

Cannot evaluate function -- may be inlined
Run Code Online (Sandbox Code Playgroud)

我曾经nm在我正在使用的共享库中列出符号,并发现我想调用的函数不在那里.没什么大惊喜.我想要的是一种生成这些内联函数的可见定义的方法.我可以访问当前包含内联定义的头文件,但我无法真正修改这些头文件.也许有一些方法可以告诉编译器发出它在翻译单元中看到的所有内联函数的定义?或者其他一些技巧可以让你更容易调用和检查gdb中的内联函数的结果?

我在Linux上使用GCC 4.7.2和GDB 7.5.1.而且我无法真正切换到非优化版本,因为我正在从生产中调试核心转储(在开发中我只是关闭优化,然后事情变得更容易).

Mar*_*ick 6

让编译器生成内联函数的可调用版本的一种方法是包含获取函数地址的代码.您还可以选择gcc.从内联函数的gcc文档:

当函数既是内联函数又是静态函数时,如果对函数的所有调用都集成到调用者中,并且从不使用函数的地址,则永远不会引用函数自己的汇编代码.在这种情况下,除非指定选项-fkeep-inline-functions,否则GCC实际上不会为函数输出汇编代码.