linux 下分离 debuginfo 到独立文件.
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 到独立文件.相关推荐
- 20191004在LINUX下如何将tar压缩文件解压到指定的目录下
百度搜索:tar 解压缩到指定目录 https://zhidao.baidu.com/question/9844116.html 在LINUX下如何将tar压缩文件解压到指定的目录下 各位,请教一下在 ...
- Linux下如何生成core dump 文件(解决segment fault段错误的问题)
Linux下如何生成core dump 文件(解决segment fault段错误的问题) 参考文章: (1)Linux下如何生成core dump 文件(解决segment fault段错误的问题) ...
- linux中rm删除的文件是否可以恢复,Linux下用rm删除的文件的恢复方法
Linux下用rm删除的文件的恢复方法_Linux教程_Linux公社-Linux系统门户网站 https://www.linuxidc.com/Linux/2008-08/14744.htm lin ...
- linux里c库和gnu c库,Linux下的C的库文件和头文件有什么区别-
Linux下的C的库文件和头文件有什么区别- (2012-04-10 01:16:57) 标签: linux 杂谈 Linux下的C的库文件和头文件有什么区别?刚刚接触 这里有点没搞清楚 如果按我的理 ...
- linux mysql 数据文件,Linux下修改MySQL数据库数据文件路径的步骤
使用rpm安装方式安装完MySQL数据库后,数据文件的默认路径为/var/lib/mysql,然而根目录并不适合用于存储数据文件. 原路径:/var/lib/mysql 目标路径:/home/mysq ...
- 搜索linux中大于m文件,linux 下查找大于100M的文件(转)
命令行如下 find . -type f -size +1000000k Linux系统下查找大文件或目录的技巧 当硬盘空间不够时,我们就很关心哪些目录或文件比较大,看看能否干掉一些了,怎么才能知道呢 ...
- linux下执行mysql的sql文件
linux下执行mysql的sql文件 mysql -uroot -proot 进入到mysql 然后执行source /var/ftp/pub/sogoodsoft.sql; 即可. www.2ct ...
- linux不同机器之间的拷贝,Linux下不同机器之间的文件拷贝
通过 scp 命令实现不同机器之间的文件拷贝. (1)本机考到目标机器:scp 本机文件 目的地: (2)其他机器考到本机:scp 其他机器上的文件 本机路径 20160701补充:通过scp与win ...
- Linux下使用exec命令将文件与文件描述符关联
在shell脚本下exec为系统自带的脚本命令,其作用是用来执行其他程序: 语法格式: exec (选项)(参数) 选项: -c:在当前环境下执行命令,即在当前shell脚本下执行,而不是打开一个新的 ...
- linux复制文件多份,Linux下同时复制多个文件
方法一 使用cp命令 cp /home/usr/dir/{file1,file2,file3,file4} /home/usr/destination/ 需要注意的是这几个文件之间不要有空格 具有共同 ...
最新文章
- 基于Bootstrap、Jquery的自适应导航栏
- gearman python 实例
- Linux中/proc目录下文件详解(二)
- [HTML5]3D标签云
- 程序员如何自我学习和成长?深度好文
- Maven:解决jar包冲突和企业开发常用编写
- html5声明utf-8,HTML5中的SVG – 什么时候是XML声明`?xml version =“1.0”encoding =“UTF-8”?`需要吗?...
- python中的matlibplot_python中如何用matlibplot画时间序列图?
- gbdt算法_GBDT算法原理及应用
- [转]Kali-linux安装之后的简单设置
- Oracle表名、列名、约束名的长度限制
- APK反编译工具使用教程
- LeetCode—5757. 矩阵中最大的三个菱形和(Get Biggest ...)[中等]—分析及代码(Java)
- 【瑞萨RA4系列】使用TinyMaix识别手写数字
- 图解CPU生产全过程——以intel CORE i7为例,展望CPU架构
- swagger2搭配knife4j 隐藏实体类的属性/字段
- oracle10G安装与配置
- 计算机网络——路由算法
- 怎么为typora配置一个可爱的小鲨鱼主题?
- 打卡第四天:三数之和
热门文章
- XML配置STS(编写Spring配置文件时,标签无自动提示符解决)
- 同步与异步,如何解决线程安全问题—synchronized详解,对象锁与类锁,静态与非静态同步方法详解
- mysql5.6.38 设置密码_Percona Server MySQL 5.6.38修改root密码(忘记root密码)
- [JNI] 开发实例(2) 编译libwebsocket,封装jni函数,搭建IM通信基础服务
- js基础-10-url,src,href的理解
- 使用kubeadm搭建的k8s集群修改node节点主机名
- php后缀加swp,注意发现交换文件 filename.swp
- android studio 中 Cannot resolve symbol 'R'(XXX) 如何解决
- java事件监听机制 概述
- 图片渲染延迟_Qt入门DirectX11学习之旅(六)DirectX11 GBuffer Deffered延迟渲染