GDB调试实践一(定位代码所属的动态库)

linux项目调试中如果涉及很多动态链接库,动态库代码变更调整后,有时候会发现程序在执行过程中某些接口函数并没有进入变更后的接口实现中,此时就会怀疑应该是有某些旧的动态库中包含了接口函数变更前的实现,那如何定位包含旧接口实现所属的动态库就成为了解决这个问题的关键:

 

这个时候linux下调试利器gdb就可以出场了。

方案一:

1)gdb 挂起程序,对问题的接口函数设置断点,此时bt发现虽然可以看到代码所属文件及函数却没显示所属的库(个人不理解为啥GDB不显示代码所属的动态库呢,其他调试工具如pstack程序的时候是显示的)。

2)bt, 然后 f *** 进入问题接口函数所属的栈

3)info registers 可以看到该函数对应的rip地址

4)info sharedlibrary 查看加载的所有动态库的内存地址的起止地址

5)比较看问题函数rip落在哪个动态的地址区域里,那个库就是问题库了

 

方案二:

1)gdb 挂起程序,对问题的接口函数设置断点

2)info registers 可以看到该函数对应的rip地址

3)info symbol 0x7f7c081e1130(rip地址)就可以看到该函数符号的完整信息,包括所属的库信息

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值