除了gcc demo.c -o demo,将demo.c编译成release版的可执行文件demo外,还有很多意想不到的功能。
加参数-g 生成debug版本
这是gdb的前提
例如,如下是一段会发生segmentation fault的代码:
#include <stdio.h>
int* g_pointer;
int g = 0;
void fun()
{
//g_pointer = (int *)&g;
*g_pointer = 1;
}
int main(void)
{
fun();
printf("%d",g);
return 0;
}
$ ./demo
Segmentation fault (core dumped)
使用gcc -g和addr2line就很容易将发生segmentation fault的代码行找出来。
$ dmesg |grep demo
[ 3365.724383] demo[3800]: segfault at 0 ip 00000000004004ff sp 00007fff4add7bd0 error 6 in demo[400000+1000]
$ addr2line -e a.out ip 00000000004004ff -f
??
??:0
fun
/home/Desktop/demo/add2line/demo.c:8