strip后调试符号单独保存文件


操作系统环境
Linux ubuntu 3.2.0-24-generic-pae #37-Ubuntu SMP Wed Apr 25 10:47:59 UTC 2012 i686 i686 i386 GNU/Linux

背景:
  生成release版程序时,进行strip操作,但是strip后,可执行程序中不再有调试信息和一些符号表。当出现问题时,排查带来了很大的难题。
俗话讲:strip的越爽,出现问题时,头疼的越厉害。

目的:
为了兼顾,既将符号表去掉了,出问题时又能用符号表。采用符号表和可执行程序分离的方式。

编译程序:
gcc -g test.c -o test

制作符号表
objcopy --only-keep-debug test test.dbg
test.dbg:产生的符号表文件

可执行程序strip
strip test -o test_release
test_release:经过strip后的程序

已经strip程序添加符号表连接
objcopy --add-gnu-debuglink=test.dbg test_release
test_release:文件中已经包含了符号表名字连接

这里test_release就是strip后的可执行程序,当程序发生异常产生core文件后,将test.dbg放到test_release同目录下,
可以直接gdb test_strip core查看段错误位置,也可以GDB挂载程序,这是会显示更多的信息。

如果对库文件进行strip,可以将调试信息放在'/usr/lib/debug'
放在哪个目录可以在gdb模式下,使用命令:show debug-file-directory查看

这里是在Ubuntu平台下试过的。这个方法可以用于动态库和可执行程序,静态库是不允许strip的,因为他会和最终的可执行程序一起strip。
在咱们部门的主程序中,这个方法应该是没问题,有兴趣的同事可以尝试一下,让主程序也实现这个功能,每次出release程序的时候,同时出一个符号表,
这样就不会再GDB时束手无策了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值