gdb调试共享库<optimized out>问题

3
我正在尝试使用gdb调试一个共享库,但当我进入该共享库中的函数时,我开始看到所有本地变量(用C编写)都显示为“”。
我尝试链接到共享库(.so)、静态库(.a),确保Makefiles中没有设置任何优化选项,即对库和库测试文件都设置了-O0和-g。
奇怪的是,我之前能够进行调试,但是“”最近才出现,但我不知道为什么,例如,最初我可以看到本地变量。
我知道这是一个含糊的问题,我可能需要提供各种进一步的信息来解决它,例如Makefiles、源代码等,但也许有人可以从这个高级别的描述中识别出问题并提供潜在的修复方案?
1个回答

5

只有最近才出现,但我不知道为什么

<optimized out> 只会在你调试优化过的代码时出现。

既然你已经验证了你的编译行中没有任何 -O* 标志(不要只看 Makefile,要检查实际的编译日志),那么逻辑上的结论是某个人在系统其他地方安装了一个不同的(优化过的)版本库,并且你正在链接到 那个 版本。

在 Linux(以及许多其他 UNIX 系统)下,你可以在链接行中添加 -Wl,-t 标志,查看实际使用的库。

当使用共享库时,GDB 的 info shared 命令将告诉你运行时选择了哪个库。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接