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
    点赞
  • 5
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:技术黑板 设计师:CSDN官方博客 返回首页
评论

打赏作者

霍宏鹏

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值