GDB 会自动单步执行内联函数
gdb automatically steps into inline functions
我正在 solaris 上调试一个使用 gdb 6.6 运行的程序,并注意到有时 gdb 会进入(内联)函数,即使我发出了下一个命令。我的开发主机最近重新安装了稍新的 solaris 10 版本,我确信在重新安装主机之前不存在自动步进。代码使用相同的选项进行编译,因为自主机重新安装以来,生成文件和所有源代码都保持不变。
是否有任何设置/新的默认选项会影响我可以检查的 gdb 调试行为?有谁知道为什么我的 gdb 现在会自动步进?这真的是一种痛苦...
[编辑]澄清一下:我的意思不是inline
关键字,而是在头文件中实现的方法/函数。例:
header.hpp:
class MyClass
{
public:
void someFunc() { ... does something }
}
source.cc:
{
MyClass instance;
instance.someFunc(); // doing NEXT in gdb will actually STEP into header.hpp
}
新版本的 Solaris 可能包含新版本的 C 或 C++ 编译器。新的编译器可能比以前更积极地进行优化。检查您的优化标志。如果您使用的是 GCC,则可以禁用 -fno-inline
的内联(请注意,默认情况下,在头文件中的类中实现的方法已内联,可以使用 -fno-default-inline
禁用)。如果使用的是本机 Solaris 编译器,则需要检查其文档。
此处报告了类似的问题。在评论中,海报提到更改调试符号以使用 STABS 解决了这个问题。
您在对我的回答的评论中提到 STABS 有效,但不可接受。另外,您提到您无法通过一个简单的示例重现该问题。如果每次都必须重新编译整个项目以执行测试,则很难解决此问题。尝试将问题隔离到项目中的几个源文件。看看它们有什么共同点(它们是否包含通用头文件,它们是否使用pragma
,编译选项是否与其他源 fies 略有不同等),并尝试创建一个具有相同问题的小示例。这样可以更轻松地确定问题的根本原因并确定如何解决问题。没有这些数据,我们只是盲人引领盲人。
- 如何以及何时使用 getline 函数执行计算?
- 主函数执行时C++堆栈溢出异常
- 如何编写在函数执行过程中垃圾回收的测试用例?
- 插入到映射中的元素在函数执行后清除
- 遵循 C++ 中的构造函数执行顺序
- 成员函数执行时成员变量的增量
- 关于如何在函数执行后使用和获取返回值的问题
- 从 C 代码 system() 函数执行的 Linux 命令与从终端执行时给出的结果不同
- 顺序异构函数执行器
- 静态 LPTSTR 变量在函数执行后丢失值
- C++如何使函数执行得更快
- C 中函数执行的优先顺序
- 函数执行时间
- 当类成员函数执行时,程序停止工作
- 主函数执行之前的C++segfault
- 如何使用以查看<chrono>函数执行所花费的时间
- 如何从另一个函数执行一个函数
- 函数执行一次
- 为我自己的函数执行通常的算术转换
- 如何对继承构造函数执行正确的SFINAE