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

Android 利用addr2line 定位 native crash问题

addr2line bin文件,是在prebuilts目录下 ,如下所示,通过find -name aarch64-linux-android-addr2line 命令,能找的到64位bin文件所在的文件目录。

prebuilts$ find -name aarch64-linux-android-addr2line./gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android-addr2line

在源码里面,在任意的位置,我们都能直接调用到addr2line 命令来使用。

使用命令如下:

addr2line  -C  -f  -e out/target/product/XXX/symbols/***.so 0000000000025494(堆栈地址)

注意so文件,得是symbols目录下的。

下面来看个实际的例子。

下面是logcat日志里面的异常堆栈信息,我们需要根据这些信息来定位具体代码的调用位置,进而来排查问题出现的原因。

1047  5334  5334 F DEBUG   :       #02 pc 000000000000e760  /vendor/lib64/libcamxncs.so (CamX::NCSService::StopNCSService()+240) (BuildId: 833401d49b1488e2db728189653417db)1047  5334  5334 F DEBUG   :       #03 pc 000000000000e564  /vendor/lib64/libcamxncs.so (CamX::NCSService::UnregisterService(CamX::NCSSensor*)+548) (BuildId: 833401d49b1488e2db728189653417db)

我们来看下这个是调用到了哪个具体代码。

1047 5334 5334 F DEBUG : #02 pc 000000000000e760 /vendor/lib64/libcamxncs.so (CamX::NCSService::StopNCSService()+240) (BuildId: 833401d49b1488e2db728189653417db)

首先在源码out目录下,搜索libcamxncs.so文件,找到libcamxncs.so 的symbols文件。

/out/target$ find -name libcamxncs.so./product/xxx/obj_arm/SHARED_LIBRARIES/libcamxncs_intermediates/libcamxncs.so./product/xxx/obj_arm/SHARED_LIBRARIES/libcamxncs_intermediates/LINKED/libcamxncs.so./product/xxx/symbols/vendor/lib64/libcamxncs.so./product/xxx/symbols/vendor/lib/libcamxncs.so

接下来,就可以采用addr2line命令。

$ addr2line -C -f -e out/target/product/XXX/symbols/vendor/lib64/libcamxncs.so 000000000000e760CamX::NCSService::StopNCSService()vendor/qcom/proprietary/camx/src/core/ncs/camxncsservice.cpp:369

那我们就可以看到,对应调用的代码是在vendor/qcom/proprietary/camx/src/core/ncs/camxncsservice.cpp下,369行。然后调用的函数是

StopNCSService(),这个调用的函数也是和异常堆栈是一致的。

其它的堆栈地址调用代码确认,也是按照这个方法来即可。

【注意】在本地用addr2line命令定位代码时,要确保本地的代码和出问题的机器烧录版本的代码内容是一致的,这样定位才是准确的。

《小驰行动派的知识星球》

————————————————

6751ede133dcb40ac90894e70ad9564c.jpeg


推荐阅读:

关于博主 

Camera基础及一些基本概念

Android Camera 学习路线 | 个人推荐

Android Camera开发系列(干货满满)

Camera Hal|如何学习一个新平台

一篇文章带你了解Android 最新Camera框架

学习完Camera入门课程视频,可以去找工作了?



http://www.kler.cn/a/555440.html

相关文章:

  • 【Python】迭代器与生成器详解,附代码(可迭代对象、定义、实现方式、区别、使用场景)
  • Dify的安装(本地部署deepseek)
  • 【核心算法篇十九】《 DeepSeek因果推断:双重差分模型如何破解政策评估的「时空难题」》
  • QSNCTF做题记录-应急响应
  • Hot100 贪心算法
  • 撕碎QT面具(9):QT创建和清除Qchart内容的办法
  • Spring AI集成Ollama调用本地大模型DeepSeek
  • 接口测试工具:Postman
  • 算法-字符串篇01-反转字符串
  • 共同性思考:数据标注研究与数据标注工作者 工作范式思考
  • Ubuntu22.04 - gflags的安装和使用
  • 七星棋牌全开源修复版源码解析:6端兼容,200种玩法全面支持
  • Linux 性能调优简单指南
  • Java+SpringBoot+Vue+数据可视化的综合健身管理平台(程序+论文+讲解+安装+调试+售后)
  • ELK 日志收集框架搭建
  • docker从容器中cp到本地、cp本地到容器
  • PHP 数据库操作:以 MySQL 为例
  • 使用Python进行PDF隐私信息检测
  • 美团MTSQL特性解析:技术深度与应用广度的完美结合
  • 【FAQ】HarmonyOS SDK 闭源开放能力 —Live View Kit (1)