使用objcopy和gdb迁移符号文件

使用objcopy和gdb迁移符号文件

摘要

我们日常工作中往往会遇到使用商业软件过程中出现一些异常crash掉或core dump之类的问题,此时可能需要在客户方调试问题,但往往客户方使用的release版本没有相关的debug信息,这时可能需要开发方提供对应版本的符号文件以便进行调试,下面介绍如何将对应版本的符号文件导出给客户方,以及客户方如何导入符号文件进行调试(前提是开发方需要确认代码安全级别,客户方需要具备一定的技术能力)。

step 1 确认版本

是双方沟通版本的过程,如果程序友好的话,获取版本信息时处理拿到基本的版本信息外,还可以给出具体提交的版本号(如,git,svn等的提交信息)。

step 2 导出符号文件

开发方根据详细版本号提供对应的符号文件,如果已保留对应版本的.symbol文件可直接提供,否则需要重新编译debug版本并导出符号文件(releese版本也可以进行符号文件分离)。
这里已openGauss的debug版为例,进行符号文件导出。

[root@host-10-208-4-190 gausskernel]# objcopy --only-keep-debug  gaussdb gaussdb.symbol

[root@host-10-208-4-190 gausskernel]# ll -rt
total 856M
-rwxr-xr-x  1 root root  26K May 18 20:05 Makefile_for_llt
-rwxr-xr-x  1 root root  41K May 18 20:05 Makefile
-rwxr-xr-x  1 root root  18K May 18 20:05 CMakeLists.txt
-rw-r--r--  1 root root 1.5K May 18 20:05 common.mk
-rw-r--r--  1 root root  715 May 18 20:05 nls.mk
drwxr-xr-x  2 root root 4.0K May 18 23:17 bootstrap
drwxr-xr-x  6 root root 4.0K May 18 23:18 security
drwxr-xr-x  7 root root 4.0K May 18 23:19 dbmind
drwxr-xr-x 10 root root 4.0K May 18 23:19 process
drwxr-xr-x  9 root root 4.0K May 18 23:19 cbb
drwxr-xr-x 10 root root 4.0K May 18 23:20 optimizer
drwxr-xr-x  6 root root 4.0K May 18 23:21 runtime
drwxr-xr-x 24 root root 4.0K May 18 23:21 storage
-rw-r--r--  1 root root  60K May 18 23:22 objfiles.txt
-rwxr-xr-x  1 root root 497M May 18 23:22 gaussdb
-rwxr-xr-x  1 root root 360M May 18 23:29 gaussdb.symbol

可以开到,debug编译后gaussdb文件大小为497M,导出符号文件大小为360M。

Step 3 导入符号文件

客户方使用gdb方式导入符号文件,即通过gdb -s在调试时导入符号文件。
为例验证可以先去掉gaussdb中的符号信息,使用strip命令。

[root@host-10-208-4-190 gausskernel]# strip gaussdb
[root@host-10-208-4-190 gausskernel]# ll -rt
total 497M
-rwxr-xr-x  1 root root  26K May 18 20:05 Makefile_for_llt
-rwxr-xr-x  1 root root  41K May 18 20:05 Makefile
-rwxr-xr-x  1 root root  18K May 18 20:05 CMakeLists.txt
-rw-r--r--  1 root root 1.5K May 18 20:05 common.mk
-rw-r--r--  1 root root  715 May 18 20:05 nls.mk
drwxr-xr-x  2 root root 4.0K May 18 23:17 bootstrap
drwxr-xr-x  6 root root 4.0K May 18 23:18 security
drwxr-xr-x  7 root root 4.0K May 18 23:19 dbmind
drwxr-xr-x 10 root root 4.0K May 18 23:19 process
drwxr-xr-x  9 root root 4.0K May 18 23:19 cbb
drwxr-xr-x 10 root root 4.0K May 18 23:20 optimizer
drwxr-xr-x  6 root root 4.0K May 18 23:21 runtime
drwxr-xr-x 24 root root 4.0K May 18 23:21 storage
-rw-r--r--  1 root root  60K May 18 23:22 objfiles.txt
-rwxr-xr-x  1 root root 360M May 18 23:29 gaussdb.symbol
-rwxr-xr-x  1 root root 138M May 18 23:30 gaussdb

使用strip命令后gaussdb的大小变为138M,导出前是497M约等于(没有符号信息的bin文件大小+符号文件大小)即:138+360=498M

导入方式

# 调试进程
$ gdb ./gaussdb -s gaussdb.symbol
# 调试core文件
$ gdb ./gaussdb core.xxxxx -s gaussdb.symbol
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏 克

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

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值