我们都知道内联函数会使调试变得更加棘手,因为它们可以从堆栈跟踪等中删除。但是假设我想从 gdb 中调用一个内联函数,并且我知道它的名称和参数。我想我应该能够做到这一点,但我明白了:
Cannot evaluate function -- may be inlined
我nm
以前在我使用的共享库中列出符号,发现我要调用的函数不在里面。没什么大惊喜。我想要的是一种生成这些内联函数的可见定义的方法。我可以访问当前包含内联定义的头文件,但我无法真正修改这些头文件。也许有某种方法可以告诉编译器发出它在翻译单元中看到的所有内联函数的定义?或者其他一些技巧可以更容易地调用和检查 gdb 中内联函数的结果?
我在 Linux 上使用 GCC 4.7.2 和 GDB 7.5.1。而且我不能真正切换到未优化的构建,因为我正在调试生产中的核心转储(在开发中我会关闭优化,然后事情就更容易了)。