linux 下分离 debuginfo 到独立文件.


gcc -ggdb utmp.c -o utmp
readelf -S utmp
# 创建一个包含 debuginfo 文件
objcopy --only-keep-debug utmp utmp.debug
# 添加一个包含路径文件的 .gnu_debuglink section, 文件必须存在.
objcopy --add-gnu-debuglink=utmp.debug utmp
# 查看 .gnu_debuglink section
objdump -s -j .gnu_debuglink utmputmp:     file format elf64-x86-64Contents of section .gnu_debuglink:0000 75746d70 2e646562 75670000 0068651a  utmp.debug...he.#
objcopy --strip-debug utmp指定gdb 加载 debuginfo 即可
gdb utmp -s utmp.debug
or
(gdb) file utmp
(gdb) symbol utmp.debug

Build ID

linux 下二进制执行文件在built阶段都会根据时间戳生成一个唯一build-id, 并加入到一个"gnu.build-id" section中. 而gdb默认搜索debuginfo会搜索指定目录(show debug-file-directory) 下build-id关联的.debug. 默认搜索的文件名为 nn/nnnn...nnnn.debug, 前两个"nn"就是它的build-id前两位,后面的nnnn...nnnn则是build-id的剩余部分.

以下命令都可查看 "gnu.build-id" section 信息.

readelf -n utmpNotes at offset 0x0000021c with length 0x00000020:Owner                 Data size       DescriptionGNU                  0x00000010       NT_GNU_ABI_TAG (ABI version tag)OS: Linux, ABI: 2.6.18Notes at offset 0x0000023c with length 0x00000024:Owner                 Data size       DescriptionGNU                  0x00000014       NT_GNU_BUILD_ID (unique build ID bitstring)Build ID: 3b756a4a68a963bcc368ff7174da8a0fae61c37freadelf  -t utmp  |grep build-id[ 3] .note.gnu.build-idreadelf --wide --sections utmp |grep build[ 3] .note.gnu.build-id NOTE            000000000040023c 00023c 000024 00   A  0   0  4objdump -s -j .note.gnu.build-id utmp
utmp:     file format elf64-x86-64Contents of section .note.gnu.build-id:40023c 04000000 14000000 03000000 474e5500  ............GNU.40024c 3b756a4a 68a963bc c368ff71 74da8a0f  ;ujJh.c..h.qt...40025c ae61c37f                             .a..

示例:

# 显示当前debuginfo默认搜索目录,也可以通过 "set debug-file-directory path" 重新指定.
(gdb) show debug-file-directory
The directory where separate debug symbols are searched for is "/usr/lib/debug".# 修改debuginfo为关联build-id debuginfo
readelf -n utmp |grep BuildBuild ID: 3b756a4a68a963bcc368ff7174da8a0fae61c37fmkdir -p /usr/lib/debug/.build-id/3b
mv utmp.debug  /usr/lib/debug/.build-id/3b/756a4a68a963bcc368ff7174da8a0fae61c37f.debug(gdb) file utmp
Reading symbols from /mnt/hgfs/DPDK/dsw/utmp...Reading symbols from /usr/lib/debug/.build-id/3b/756a4a68a963bcc368ff7174da8a0fae61c37f.debug...done.
done.

参考:

https://sourceware.org/gdb/onlinedocs/gdb/Separate-Debug-Files.html

linux 下分离 debuginfo 到独立文件.相关推荐

  1. 20191004在LINUX下如何将tar压缩文件解压到指定的目录下

    百度搜索:tar 解压缩到指定目录 https://zhidao.baidu.com/question/9844116.html 在LINUX下如何将tar压缩文件解压到指定的目录下 各位,请教一下在 ...

  2. Linux下如何生成core dump 文件(解决segment fault段错误的问题)

    Linux下如何生成core dump 文件(解决segment fault段错误的问题) 参考文章: (1)Linux下如何生成core dump 文件(解决segment fault段错误的问题) ...

  3. linux中rm删除的文件是否可以恢复,Linux下用rm删除的文件的恢复方法

    Linux下用rm删除的文件的恢复方法_Linux教程_Linux公社-Linux系统门户网站 https://www.linuxidc.com/Linux/2008-08/14744.htm lin ...

  4. linux里c库和gnu c库,Linux下的C的库文件和头文件有什么区别-

    Linux下的C的库文件和头文件有什么区别- (2012-04-10 01:16:57) 标签: linux 杂谈 Linux下的C的库文件和头文件有什么区别?刚刚接触 这里有点没搞清楚 如果按我的理 ...

  5. linux mysql 数据文件,Linux下修改MySQL数据库数据文件路径的步骤

    使用rpm安装方式安装完MySQL数据库后,数据文件的默认路径为/var/lib/mysql,然而根目录并不适合用于存储数据文件. 原路径:/var/lib/mysql 目标路径:/home/mysq ...

  6. 搜索linux中大于m文件,linux 下查找大于100M的文件(转)

    命令行如下 find . -type f -size +1000000k Linux系统下查找大文件或目录的技巧 当硬盘空间不够时,我们就很关心哪些目录或文件比较大,看看能否干掉一些了,怎么才能知道呢 ...

  7. linux下执行mysql的sql文件

    linux下执行mysql的sql文件 mysql -uroot -proot 进入到mysql 然后执行source /var/ftp/pub/sogoodsoft.sql; 即可. www.2ct ...

  8. linux不同机器之间的拷贝,Linux下不同机器之间的文件拷贝

    通过 scp 命令实现不同机器之间的文件拷贝. (1)本机考到目标机器:scp 本机文件 目的地: (2)其他机器考到本机:scp 其他机器上的文件 本机路径 20160701补充:通过scp与win ...

  9. Linux下使用exec命令将文件与文件描述符关联

    在shell脚本下exec为系统自带的脚本命令,其作用是用来执行其他程序: 语法格式: exec (选项)(参数) 选项: -c:在当前环境下执行命令,即在当前shell脚本下执行,而不是打开一个新的 ...

  10. linux复制文件多份,Linux下同时复制多个文件

    方法一 使用cp命令 cp /home/usr/dir/{file1,file2,file3,file4} /home/usr/destination/ 需要注意的是这几个文件之间不要有空格 具有共同 ...

最新文章

  1. 基于Bootstrap、Jquery的自适应导航栏
  2. gearman python 实例
  3. Linux中/proc目录下文件详解(二)
  4. [HTML5]3D标签云
  5. 程序员如何自我学习和成长?深度好文
  6. Maven:解决jar包冲突和企业开发常用编写
  7. html5声明utf-8,HTML5中的SVG – 什么时候是XML声明`?xml version =“1.0”encoding =“UTF-8”?`需要吗?...
  8. python中的matlibplot_python中如何用matlibplot画时间序列图?
  9. gbdt算法_GBDT算法原理及应用
  10. [转]Kali-linux安装之后的简单设置
  11. Oracle表名、列名、约束名的长度限制
  12. APK反编译工具使用教程
  13. LeetCode—5757. 矩阵中最大的三个菱形和(Get Biggest ...)[中等]—分析及代码(Java)
  14. 【瑞萨RA4系列】使用TinyMaix识别手写数字
  15. 图解CPU生产全过程——以intel CORE i7为例,展望CPU架构
  16. swagger2搭配knife4j 隐藏实体类的属性/字段
  17. oracle10G安装与配置
  18. 计算机网络——路由算法
  19. 怎么为typora配置一个可爱的小鲨鱼主题?
  20. 打卡第四天:三数之和

热门文章

  1. XML配置STS(编写Spring配置文件时,标签无自动提示符解决)
  2. 同步与异步,如何解决线程安全问题—synchronized详解,对象锁与类锁,静态与非静态同步方法详解
  3. mysql5.6.38 设置密码_Percona Server MySQL 5.6.38修改root密码(忘记root密码)
  4. [JNI] 开发实例(2) 编译libwebsocket,封装jni函数,搭建IM通信基础服务
  5. js基础-10-url,src,href的理解
  6. 使用kubeadm搭建的k8s集群修改node节点主机名
  7. php后缀加swp,注意发现交换文件 filename.swp
  8. android studio 中 Cannot resolve symbol 'R'(XXX) 如何解决
  9. java事件监听机制 概述
  10. 图片渲染延迟_Qt入门DirectX11学习之旅(六)DirectX11 GBuffer Deffered延迟渲染