gdb single stepping until exit from function *, which has no line number information解决办法

前提:编译程序使用的4.7.2版本的gcc,同时编译的时候也使用了-g3的参数。如果不了解-g3的含义,可以参见:https://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html#Debugging-Options

利用gdb单步执行理解刚接手的程序的时候,提示下图中的错误:



查了很多的资料,找了很多的解决办法:

1、更改gdb7.2版本到gdb7.8; 

2、编译的时候加入-gdwarf-2等编译选项。

都不能解决问题。


后来认真看了编译程序的BUILD文件,发现程序加入了-fvisibility=hidden以及-Wl,-Bsymbolic这些链接选项。

恍然大悟。加入-fvisibility=hidden这个选项导致不能看到行号等信息。


那当初编译程序的人为什么加入“-fvisibility=hidden”或者“-Wl,-Bsymbolic”这些链接选项呢?

主要是想解决多个共享库符号表冲突的问题。每个共享库用自己库中的符号表。

具体含义也可以参见:

https://stackoverflow.com/questions/6538501/linking-two-shared-libraries-with-some-of-the-same-symbols/6540059#6540059

另外,对于编写c++程序,要养成好的编程习惯,加入命名空间,减少符号冲突的可能。







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值