前言
在使用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命令将代码编译成二进制可执行文件: