【发布时间】:2014-03-28 14:22:41
【问题描述】:
我们都知道内联函数会使调试变得更加棘手,因为它们可以从堆栈跟踪等中省略。但是假设我想从 gdb 中调用一个内联函数,并且我知道它的名称和参数。我想我应该能够做到这一点,但我明白了:
Cannot evaluate function -- may be inlined
我用nm列出了我正在使用的共享库中的符号,发现我要调用的函数不在里面。没什么大惊喜。我想要的是一种生成这些内联函数的可见定义的方法。我可以访问当前包含内联定义的头文件,但我无法真正修改这些头文件。也许有某种方法可以告诉编译器发出它在翻译单元中看到的所有内联函数的定义?或者其他一些可以更轻松地调用和检查 gdb 中内联函数结果的技巧?
我在 Linux 上使用 GCC 4.7.2 和 GDB 7.5.1。而且我不能真正切换到未优化的构建,因为我正在调试生产中的核心转储(在开发中我会关闭优化,然后事情就更容易了)。
【问题讨论】:
-
注意。最好只创建目标文件并在调试时将它们加载到 gdb 中以调用它,而不是将整个东西包含到生产可执行文件中,这会使其(有点......)更大。
标签: c++ c debugging gdb inline-functions