Linux下将动态库的调试信息分离

本文介绍了在Linux环境下,如何使用eu-strip工具保留动态库的调试信息。通过编译时加入-g选项,然后使用eu-strip剥离符号表并保存为单独的.debug文件,调试时根据默认路径或自定义路径加载debug文件,实现调试。此外,还提到了objcopy的另一种分离方法,但eu-strip更便捷。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    在linux下有个工具叫做strip,这是一个可以将linux下的可执行文件的符号表去除,减少每个可执行文件的大小,这对于嵌入式方面很有必要。但是没有了符号表也就意味着没有办法采用gdb进行调试,因为gdb调试是读取ELF文件头来获取符号表,进而调试,但strip之后,可执行文件的ELF文件头就没有.symtab这个符号表,有的仅是动态符号表。在strip之后nm libxxx.so是看不到符号表的,nm -D libxxx.so可以看到动态符号表,但用处不大,但strip有个参数选项叫做--only-keep-debug,这个选项可以在strip的时候保留debug调试信息,但是strip有个弊端,就是什么样的strip就处理什么样的可执行文件,x86的strip处理不了ARM平台的库。当然x86平台上肯定也有ARM的strip工具链。

      这里介绍的是一个叫做eu-strip的东西,这是一个elf工具,和readelf一样,只要是ELF文件都能处理,不分平台。下面是制作可调试的strip版本的步骤:

1.编译:既然要调试,编译就得加入-g选项,编译出so和二进制文件。

2.strip:eu-strip libxxxx.so -f libxxx.so.debug,将libxxxx.so进行strip,同时将调试信息保存在libxxxx.so.debug文件中,在调试的时候在将调试信息读取加载。

        搜索libxxx.so.debug文件的常用默认路径:1.可执行文件所在的路径;2./usr/lib/debug+可执行 文件的绝对路径。默认路径不止这两个,但这两个最常用。将debug文件放在这两个路径下面,在调试的时候,会自动加载这些d

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值