关于“gdb无法打断点”的分析与解决办法

1 篇文章 0 订阅
1 篇文章 0 订阅

萌新救火接手了一个比较大的框架,要从开发机把编译好的bin\so,以及data放到测试机部署并发布。

  1. gdb对已经启动的进程调试

首先,要在测试机上跑起来编写的http和tcp服务,与平时不一样的是,这里gdb是对于系统以及跑起来的进程直接调试,采用

ps -ef | grep xxx

来查对应的PID,用

gdb -p xxxxx

即可对改进程(服务)进行调试。

2 . gdb无法打上断点
进入gdb,直接给出了
warning: Could not load shared library symbols for 7 libraries, e.g. xxxx.so.
开始怀疑了跨机器(不同发行版本系统)直接直接部署问题,路径问题等。

直接说解决办法:
2.1 查cmake是否生成debug版本makefile,debug要比release大5、6倍,可以简单看一下

cmake -DCMAKE_BUILD_TYPE=Debug ..

2.2 在gdb上

info sharedlibrary

查看到底是哪些有关的symbols没加载上。如下图:
info sharedlibrary

liblog4cxx.so.10是一个log相关的so,我不需要调试,断点也不会在这里,所以Syms Read是No也无所谓;但是libgeo_new.so是我需要调试的,如果系统因为某些原因真的没法正确加载,可以用

set solib-search-path /home/xxx/workspace/geo/SearchEngine/src/onlinesearch/build/bin

指定编译生成的这个so的目录,此时再看 info sharedlibrary
info sharedlibrary_new
已经成功读取了so文件
或者,你可以在有这个so文件的目录下直接gdb

总结:
1、确保debug版本编译
2、找到正确的路径去调试或者指定

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值