萌新救火接手了一个比较大的框架,要从开发机把编译好的bin\so,以及data放到测试机部署并发布。
- 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没加载上。如下图:
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
已经成功读取了so文件
或者,你可以在有这个so文件的目录下直接gdb
总结:
1、确保debug版本编译
2、找到正确的路径去调试或者指定