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

bph*_*bph 3 c gdb

我正在尝试使用 gdb 来调试共享库

当进入共享库中的函数时,我开始获取<optimized out>所有局部变量(用 C 编写)

我尝试链接到共享库(.so),链接到静态库(.a),确保在 Makefile 中没有设置优化,即为库和库线束设置 -O0 和 -g

奇怪的事情我以前能够调试它,<optimized out>最近才出现,但我不知道为什么,例如我最初能够看到局部变量

我知道这是一个模糊的问题,我可能需要提供各种进一步的信息来对其进行排序,例如 Makefile、源代码等,但可能有人从这个高级描述中认识到问题并可以提供潜在的解决方案?

Emp*_*ian 5

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

<optimized out>仅当您调试优化代码时才会出现。

由于您已经验证-O*编译行中不存在任何标志(不要只查看Makefile,检查实际的编译日志),逻辑结论是有人在其他地方安装了您的库的不同(优化)版本系统,并且您正在链接到版本。

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

当使用共享库时,GDBinfo shared命令会告诉您在运行时选择哪个库。