我正在尝试使用gdb来调试共享库
当进入共享库中的函数时,我开始为所有局部变量获取<optimized out>
(用C语言编写)
我尝试链接到链接到静态库(.a)的共享库(.so),确保在Makefile中没有设置优化,即为库和库设置-O0和-g线束
我之前能够调试它的奇怪之处,<optimized out>
最近才出现,但我不知道为什么,例如我能够看到最初的局部变量
我知道这是一个模糊的问题,我可能需要提供各种进一步的信息来对其进行排序,例如: Makefile,源代码等,但可能有人从这个高级描述中识别问题,并且可以提供潜在的解决方案吗?
答案 0 :(得分:4)
最近才出现,但我不知道为什么
只有在调试优化代码时才能显示<optimized out>
。
由于您已经验证编译行中没有-O*
标志(不要只查看Makefile
,请检查实际编译日志),合乎逻辑的结论是,有人在您系统的其他位置安装了不同(优化)的库版本,并且您要链接到那个版本。
在Linux(以及许多其他UNIX系统)上,您可以向链接行添加-Wl,-t
标记,并查看链接时实际使用的库。
使用共享库时,GDB info shared
命令将告诉您在运行时选择哪个库。