C++崩溃定位:使用addr2line解析地址到源码实战
本文将从底层原理入手,结合实战案例,带大家掌握 addr2line 的核心用法,彻底告别 “崩溃地址看不懂” 的困境。
0.引言
免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈
当 C++ 程序在 Linux 环境下崩溃时,我们经常会看到这样的输出:
Segmentation fault (core dumped)
然而很多时候是不会产生core文件的,我们只有增加日志打印的类似输出(一般服务端程序都会增加对应的backtrace):
Program received signal SIGSEGV, Segmentation fault.0x0000000000401526 in ?? ()
这些崩溃往往没有完整的调试日志,仅能拿到一串十六进制崩溃地址(如 0x400526 或 0x7f0012345678)以及函数名称。面对这些的地址,我们很难直接定位到源代码中的 bug 位置。
而addr2line正是解决该问题的 “利器”:它是 GNU Binutils 工具集的一员,能将程序崩溃时的内存地址,反向解析为对应的文件名、函数名、行号,甚至支持 C++ 名称修饰解析、动态库地址偏移计算等复杂场景。
本文将从底层原理出发,结合实战案例,带大家掌握 addr2line 的核心用法,彻底告别 “崩溃地址看不懂” 的困境。
1.addr2line 的基本原理
addr2line 的工作原理是 “地址→调试信息→源码” 的反向查找,其依赖 3 个核心基础:符号表、ELF 文件格式、DWARF 调试信息。对于这每个部分包含的内容可以参考编译链接的原理讲解系列文章:从源码到可执行文件:hello.c 的二进制之旅,更为详细的DWARF信息也可以参考:https://dwarfstd.org/。其整体定位过程如下图,如果没有调试信息的话会输出问号,我们只需要将命令中的可执行文件变化为对应的符号信息即可(因为线上release版本一般都会剥离符号信息,所以这也是我们排查线上问题最常用的)。
addr2line -e program 地址addr2line -e program.debug 地址

2.实际使用
我们用一个实际的例子来看一下其使用方式,手动构造除0异常宕机,下面例子中没有增加backtrace日志,我们可以通过dmsg或者core文件获取到崩溃地址。
#include
g++ -g -o a.out a.cpp./a.out# Floating point exception# 通过core文件或者dmsg获取地址addr2line -e a.out 0x400a56#输出文件和行数 /a.cpp:5
3.常用参数介绍
-a --addresses:在函数名、文件和行号信息之前,显示地址,以十六进制形式。-b --target=:指定目标文件的格式为bfdname。
-e --exe=:指定需要转换地址的可执行文件名。
-i --inlines : 如果需要转换的地址是一个内联函数,则输出的信息包括其最近范围内的一个非内联函数的信息。
-j --sectinotallow=:给出的地址代表指定section的偏移,而非绝对地址。
-p --pretty-print:使得该函数的输出信息更加人性化:每一个地址的信息占一行。
-s --basenames:仅仅显示每个文件名的基址(即不显示文件的具体路径,只显示文件名)。
-f --functions:在显示文件名、行号输出信息的同时显示函数名信息。
-C --demangle[=style]:将低级别的符号名解码为用户级别的名字。
-h --help:输出帮助信息。
-v --version:输出版本号。
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
小米SU7深度试驾体验:专业媒体评测与日常驾驶焦点
当专业媒体试驾团队将方向盘交给小米新一代SU7时,这款运动型轿车的真实面貌逐渐清晰。不同于传统性能车对速度的单一追求,试驾报告不约而同指向一个核心结论:这是一款重新定义日常驾驶体验的智能座驾。在舒适
五菱缤果Pro升级登场:空间更大配前备箱,35分钟快充更贴心
五菱在纯电小型车领域再度发力,全新车型缤果Pro正式登场,为这一细分市场注入新的活力。这款车精准定位在老款缤果与缤果S之间,旨在满足消费者对空间与配置的更高需求。从车身尺寸来看,缤果Pro长4050
特斯拉全美投用55座高速超充站
格隆汇3月28日|特斯拉重庆高速服务区超级充电站项目今日正式上线,首批启用55座。这是特斯拉在国内一次性投建数量最多、规模最大的高速服务区超级充电站项目。此次上线的高速服务区特斯拉V4超充站涵盖了1
永艺股份亮相第57届中国家博会:坐具专家新亮点
2026年3月28日,第57届中国国际家具博览会第二期办公商用展在广州琶洲举行。作为中国家具行业的重要年度展会,本届家博会分两期举行。永艺股份作为中国椅业领域代表企业之一参展亮相,围绕“坐健康”系统
存储板块调整:错杀还是理性回调?深度解析后市走向
这周谷歌的一个新技术发布,直接把存储板块砸懵了。以美光科技为例,直接来了个五连阴,A股相关标的也同样出现调整。TurboQuant,这个号称能把长文本KV Cache存储需求砍6倍、推理速度提8倍的
- 日榜
- 周榜
- 月榜
相关攻略
2015-03-10 11:25
2015-03-10 11:05
2021-08-04 13:30
2015-03-10 11:22
2015-03-10 12:39
2022-05-16 18:57
2025-05-23 13:43
2025-05-23 14:01
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程

