gpt4 book ai didi

c++ - gdb 自动进入内联函数

转载 作者:行者123 更新时间:2023-11-30 02:04:16 25 4
gpt4 key购买 nike

我在 solaris 上使用 gdb 6.6 调试正在运行的程序,并注意到有时 gdb 会进入(内联)函数,即使我发出了 next 命令。我的开发主机最近重新安装了稍新版本的 solaris 10,我确信在重新安装主机之前不存在自动步进。代码使用相同的选项编译,因为 makefile 和所有源代码自主机重新安装后未更改。

有没有我可以检查的影响 gdb 调试行为的设置/新默认选项?有谁知道为什么我的 gdb 现在自动执行?真的很痛苦...

[edit] 澄清:我不是指 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- 禁用默认内联)。如果您使用的是 native Solaris 编译器,则需要查看其文档。

报告了类似的问题here .在评论中,发布者提到将调试符号更改为使用 STABS 解决了这个问题。

您在对我的回答的评论中提到 STABS 有效,但 Not Acceptable 。此外,您提到您无法通过一个简单的示例重现该问题。如果您每次都必须重新编译整个项目来执行测试,则很难解决此问题。尝试将问题隔离到项目中的几个源文件。查看它们的共同点(它们是否包含通用头文件,是否使用 pragma,编译选项是否与其他源文件略有不同,等等),并尝试创建一个有同样问题的小例子。这将使您更容易确定问题的根本原因并确定解决方法。没有这些数据,我们就是盲人领盲人。

关于c++ - gdb 自动进入内联函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10878212/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com