A
Air官方
崩溃发生后再找符号表,晚了。符号表准备是崩溃可解析的前提,这篇讲要准备什么、怎么准备、怎么用。
▍什么是符号表
编译器生成的映射信息:机器码地址到源码位置(文件、行号、函数名)、函数到地址区间。带符号的产物可以还原崩溃栈;剥离符号的产物(发布包为了体积)只有地址。崩溃回溯的原理:拿发布包里的地址,在对应版本的符号信息里查回源码位置——前提是符号信息与发布产物严格一一对应。
▍准备清单
三条纪律:一,每个发布版本归档符号包(构建时保留带符号版本,与发布包配对存储,版本号关联)。二,静态库的中间符号也要留(崩溃栈可能落在库里)。三,第三方预编译库要向提供方索取符号(拿不到的记录在案,回溯到这一层至少知道是哪个库)。符号包存储注意:体积可观,但存符号的钱不能省——线上崩溃回溯不了,排查成本十倍起。
▍还原流程
崩溃报告到手(地址栈)——找到对应版本符号包——用工具逐地址还原(addr2line 类工具是主力)。注意两个技术点:栈里的地址可能经过重定位(加载基址偏移),还原前要按实际加载基址换算,系统崩溃报告通常带映射信息;优化编译(内联、尾部调用)会让栈缺帧或错位,还原结果有噪声时结合寄存器与映射信息人工校正。
▍崩溃前的最后一刻
符号表还原的是位置,定位还需要现场信息:崩溃前的日志(最后的操作、状态)、复现路径。所以日志规范(前篇)与符号准备是配套工程:日志告诉你发生了什么,符号告诉你死在哪里。
▍演练制度
发布前做一次演练:故意触发一个已知崩溃(测试通道),全链路走一遍——报告采集、版本对应、符号还原、定位结论。演练通过的版本才有资格说崩溃可回溯。
▍验收
归档完整性检查(每个发布版本符号在库)、还原演练通过率、第三方库符号缺口清单更新。
更多真实移植案例,欢迎到 apps 板块翻看 56 篇《鸿蒙PC适配全记录》系列实录。
▍什么是符号表
编译器生成的映射信息:机器码地址到源码位置(文件、行号、函数名)、函数到地址区间。带符号的产物可以还原崩溃栈;剥离符号的产物(发布包为了体积)只有地址。崩溃回溯的原理:拿发布包里的地址,在对应版本的符号信息里查回源码位置——前提是符号信息与发布产物严格一一对应。
▍准备清单
三条纪律:一,每个发布版本归档符号包(构建时保留带符号版本,与发布包配对存储,版本号关联)。二,静态库的中间符号也要留(崩溃栈可能落在库里)。三,第三方预编译库要向提供方索取符号(拿不到的记录在案,回溯到这一层至少知道是哪个库)。符号包存储注意:体积可观,但存符号的钱不能省——线上崩溃回溯不了,排查成本十倍起。
▍还原流程
崩溃报告到手(地址栈)——找到对应版本符号包——用工具逐地址还原(addr2line 类工具是主力)。注意两个技术点:栈里的地址可能经过重定位(加载基址偏移),还原前要按实际加载基址换算,系统崩溃报告通常带映射信息;优化编译(内联、尾部调用)会让栈缺帧或错位,还原结果有噪声时结合寄存器与映射信息人工校正。
▍崩溃前的最后一刻
符号表还原的是位置,定位还需要现场信息:崩溃前的日志(最后的操作、状态)、复现路径。所以日志规范(前篇)与符号准备是配套工程:日志告诉你发生了什么,符号告诉你死在哪里。
▍演练制度
发布前做一次演练:故意触发一个已知崩溃(测试通道),全链路走一遍——报告采集、版本对应、符号还原、定位结论。演练通过的版本才有资格说崩溃可回溯。
▍验收
归档完整性检查(每个发布版本符号在库)、还原演练通过率、第三方库符号缺口清单更新。
更多真实移植案例,欢迎到 apps 板块翻看 56 篇《鸿蒙PC适配全记录》系列实录。
楼主
7 天前