我们在linux下开发程序时,经常遇到Segmentation fault的错误信息,如果代码比较少还可以去一行行排除,但是代码量比较大的时候,往往是一件头疼的事情。Segmentation fault会有地址抛出,我们可以利用addr2line定位到程序出错的行,这样是不是很方便的排查问题。下面就简单的介绍一下addr2line的使用方法。
1)编写测试代码故意产生Segmentation fault。
2)gcc编译测试代码,注意需要增加-g选项
[root@localhost work]# gcc main.c -g -o main
3)运行测试代码,产生Segmentation fault信息
[root@localhost work]# ./main
Segmentation fault (core dumped)
4)dmesg查看系统崩溃的信息,查找崩溃的地址
[root@localhost work]# dmesg >1.txt
通过dmesg把错误定向到了1.txt,查看1.txt文件的最后
5)使用addr2line命令查看错误信息
[root@localhost work]# addr2line -e main 0x080483a4
/work/main.c:6
6)打开测试代码,定位到错误的信息,后续就可以修改错误的代码了