【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)
addr2line - Converts addresses into filenames and line numbers
1. addr2line 的作用
将指定地址转换为对应的文件名和行号, 常用于分析和定位内存访问错误的问题.
2. addr2line 的用法
addr2line [option(s)] [addr(s)]
如果在命令行上未指定地址, 将从标准输入中读取地址.
- 开启core dump选项
ulimit -c unlimited
- 运行程序, 崩溃时生成core文件
// 编译该程序时需要加上-g选项
./a.out
- 读取core文件, 获取IP寄存器的值
dmesg
- 使用addr2line定位行代码
addr2line -e a.out 00005565569a160a -f
3. addr2line 的常用参数option(s)
参数/选项 | 含义 | 举个例子 |
---|---|---|
-e --exe=< executable > | 设置输入文件名, 默认是a.out | addr2line -e ./file 0000555b68cf760a |
-f --functions | 显示函数名 | addr2line -e ./file 0000555b68cf760a -f |
-p --pretty-print | 更具有可读性 | addr2line -e ./file 0000555b68cf760a -fp |
4. 建议
使用gdb进行调试和修复, 它不香吗?
Linux上Core Dump文件的形成和分析
该小结摘自: https://blog.51cto.com/baidutech/904419
Core,又称之为Core Dump文件,是Unix/Linux操作系统的一种机制,对于线上服务而言,Core令人闻之色变,因为出Core的过程意味着服务暂时不能正常响应,需要恢复,并且随着吐Core进程的内存空间越大,此过程可能持续很长一段时间(例如当进程占用60G+以上内存时,完整Core文件需要15分钟才能完全写到磁盘上),这期间产生的流量损失,不可估量。
凡事皆有两面性,OS在出Core的同时,虽然会终止掉当前进程,但是也会保留下第一手的现场数据,OS仿佛是一架被按下快门的相机,而照片就是产出的Core文件。里面含有当进程被终止时内存、CPU寄存器等信息,可以供后续开发人员进行调试。