在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

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

被折叠的 条评论
为什么被折叠?



