为二进制文件添加.gnu_debugdata调试信息

前言

在使用gcc/g++编译二进制文件过程中,如果添加了-g参数,编译出来的二进制文件会带有debug信息,供调试使用。但是debug信息往往占用空间很大,导致二进制文件太大,在发布到生产环境时,一般会去掉调试信息,以减小二进制文件大小。如此一来,在出现问题后就无法直接使用gdb调试工具进行调试了。一种可行的做法是版本发布时保留debug信息,出现问题后使用debug信息进行问题分析调试,但这种做法相对比较麻烦。mini debuginfo的技术提供了一种有效的解决思路。

mini debuginfo的思路是在二进制ELF文件中添加一个section(.gnu_debugdata),section中仅保留最少的调试信息(如:只保留可调试的函数符号),并对调试进行进行压缩,以尽可能地减少调试信息大小。

下面以一个实际例子说明如何给二进制文件添加该类型的section。

实例

我们以一个简单的例子开始,以下是该例子的代码:

#include <stdio.h>
int a;
void func1()
{
        a = 1;
}

void func2()
{
        int test;
        a = 2;
        test = a;
}

int main()
{
        func1();
        func2();
        printf("a is %d\n", a);
        return 0;
}

编译二进制文件

使用gcc命令将代码编译成二进制可执行文件:


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值