当前位置: 首页 > news >正文

Android使用addr2line分析Native Crash

NDK提供的工具将函数地址解析为具体的函数名和行数才能进一步分析问题。

常用的地址转换工具有addr2line、ndk-stack等,个人比较喜欢addr2line,所以接下来介绍下该工具的基本使用方式

日常使用过程中,只需要关注-C -f -e三个参数即可

// -C: Demangle函数名
// -f: 显示函数名
// -e: 带符号表的so路径

这里展开说说-C这个参数,我们知道C/C++语言在编译以后,函数的名字会被编译器修改为编译器内部识别的名字,该名字在链接的时候被用到。将C++源代码转换为C++ ABI标识符的过程称为mangle,相反的过程称为demangle

以Linux下的g++为例,每个方法都以_Z开头,比如_Z3foov就是函数foo(),v表示参数类型为void。从foo()转换为_Z3foov的过程被称为mangle,_Z3foov转换为foo()的过程被称为demangle。

其中NDK中的aarch64-linux-android-c++fil(和addr2line同一个目录)是专门用来支持Demangle的

新建一个带C++的Android Studio工程,主动创造一个native crash

启动app后如预期崩溃

抓到崩溃信息后,根据ABI找到相对应的addr2line工具和带符号表的so文件。

我们主要关注backtrace后面的信息,同时带"pc"和"/data"的行基本就是app相关的崩溃行了

除了最后一个是被strip了符号的so,前三个so文件都是可以的

终端中使用addr2line转换地址

aarch64-linux-android-addr2lin -C -f -e ${SO_PATH} ${Address} ${Address} ...

 

解析结果

定位到具体的函数名和行数后就可以进一步排查问题了

Crash堆栈解析脚本

日常工作或者学习中还是使用一个python脚本来解析带crash堆栈的文件比较方便

#!/usr/bin/python
import sys
import re
import os

ADDR2LINE_PATH ='your tool abs path'

if len(sys.argv) >= 3:
    SO_PATH = sys.argv[1]
    FILE_PATH = sys.argv[2]

CMD_BASE = ADDR2LINE_PATH + ' -C -f -e ' + SO_PATH + ' '
with open(FILE_PATH, 'r') as f:
    for line in f:
        crash = re.search('#[0-9]+ +pc +([0-9A-Fa-f]+) +/data', line)
        if crash is not None:
            addr = crash.groups(1)[0]
            cmd = CMD_BASE + addr
            res = os.popen(cmd).read()
            print(res)

使用效果

 

相关文章:

  • 电脑里的文件删除了还能恢复吗?这些方法能帮你找回
  • DDD设计方法-3-仓储,封装持久化数据
  • 遍历所有文件夹,并把文件里所有的csv合并为一个dataframe
  • ES6基础----Map的使用
  • vue3.5更新内容
  • 爬虫常用模板
  • css画个熊猫
  • C语言:刷题笔记
  • MyCat
  • ant vue design日期组件date-picker自定义快捷选择日期封装
  • OpenXR Monado创建Swapchain和生成纹理
  • Verilog基础,原码,反码与补码的概念
  • 透明加密为什么是最佳选择,10款透明加密软件推荐
  • CGLIB 是什么
  • Linux驱动(四):Linux2.6字符设备驱动及GPIO子系统
  • [数据集][目标检测]鲜花检测数据集VOC+YOLO格式25215张106类别
  • 【2024-2025源码+文档+调试讲解】微信小程序的城市公交查询系统
  • 三级_网络技术_59_应用题
  • 机器学习:svm算法原理的优缺点和适应场景
  • 【Python】数据分析分类图可视化
  • 烟花、美食和购物优惠都安排上了,上海多区开启热闹模式
  • 习近平对辽宁辽阳市白塔区一饭店火灾事故作出重要指示
  • 昆明破获一起算命破灾诈骗案,民警:大师算不到自己的未来
  • 来伊份一季度净利减少近八成,今年集中精力帮助加盟商成功
  • 泽连斯基承认乌情报部门刺杀俄军高官
  • 人民日报:应对外贸行业风险挑战,稳企业就是稳就业