动态库调试

在一个大型工程里,往往需要依赖很多动态库(linux下是.so文件),我们只能调用动态库里的函数,却不能跟踪动态库中函数的具体实现流程和变量的值,要理解函数的功能一般都是看文档说明,有时候文档又说的不清楚,这个时候只能结合源码做一些猜测,但是源代码又错综复杂,在短时间内很难理解,所以要是能够单步调试源码并结合打印信息效果会好很多。

这篇文章就结合实例讲解在linux环境下怎么调试动态库,以sqlite3tcl8.7为例,这2个工程的搭建参考

http://blog.csdn.net/pfysw/article/details/78629167

 

sqlite3作为主工程,tcl8.7作为动态库,现在要做的就是在sqlite3工程下调试tcl8.7源码。

如果之前编译安装过tcl8.7程序,会在/usr/local/lib文件夹下生成一个libtcl8.7.so的动态库,现在把它删除。

cd /usr/local/lib
rm libtcl8.7.so

因为默认是先调用/usr/local/lib的动态库,这么做的目的是希望使用工程内的libtcl8.7.so,之后可能会多次修改源码来调试,这样比较方便,编译好就可以调试了。当然也可以改makefile把生成的动态库换个名字。

我们现在要搭建的是eclipse工程,解压tcl8.7a1源码后,在tcl8.7a1/unix目录下执行./configure就可以了,剩下的编译工作就交给eclipse

eclipse新建c工程tcl8.7,把整个源码文件夹拷到工程目录下,更改unix目录下的makefile文件,修改点如下:

在第101行修改编译选项,把原来的optimize改为debug

# To change the compiler switches, for example to change from optimization to
# debugging symbols, change the following line:
CFLAGS                    = $(CFLAGS_DEBUG)
#CFLAGS                            = $(CFLAGS_OPTIMIZE)
#CFLAGS                            = $(CFLAGS_DEBUG) $(CFLAGS_OPTIMIZE)
#CFLAGS                            = $(CFLAGS_OPTIMIZE)  -pipe

     eclipse里配置编译环境,不使用自动生成makefile,使用源码里的makefile来编译,需要改3个地方:

clip_image002[4]

编译前需在工程目录点右键clean一下,然后编译就可以在unix目录下看到生成的libtcl8.7.so文件了。

sqlite3的工程里设置动态库的路径

clip_image004[4]

debug configuration里设置libtcl8.7.so的源码路径:

clip_image006[4]

配置动态库的路径:

clip_image008[4]

配置好后就可以调试了:

clip_image010[4]

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值