Android 使用addr2line分析so异常

在 Android 开发中,addr2line 是一个用于将程序地址转换为源代码位置的工具。它通常用于分析崩溃日志或错误报告,以确定问题的源代码位置。
要在 Android 中使用 addr2line 工具进行问题分析,你需要获取崩溃堆栈信息,并识别其中的程序地址。然后,使用 addr2line 工具将程序地址转换为源代码位置。
下面是一个基本的使用示例:

  1. 先写一个异常

    extern "C"
    JNIEXPORT jstring JNICALL
    Java_com_test_jnitest_TestLib_stringFromJNI(JNIEnv *env, jobject thiz) {std::string hello = "Hello from C++";int* ptr;*ptr = 5; // 尝试对未初始化的指针赋值return env->NewStringUTF(hello.c_str());
    }
    
  2. 运行获取崩溃堆栈信息

     com.test.jnitest                     A  Fatal signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 0x722de89864 in tid 17168 (om.test.jnitest), pid 17168 (om.test.jnitest)crash_dump64                         A  pid: 17168, tid: 17168, name: om.test.jnitest  >>> com.test.jnitest <<<crash_dump64                         A        #00 pc 000000000002840c  /data/app/~~_dVrriJRajAtRrgPzNV3qQ==/com.test.jnitest-MEaj31G59slbtWaw_EWZxw==/base.apk!libjnitest.so (offset 0x476000) (Java_com_test_jnitest_TestLib_stringFromJNI+64) (BuildId: 546f68192868e6deb0630b50b9b0a275d4742350)crash_dump64                         A        #08 pc 00000000000009da  [anon:dalvik-classes4.dex extracted in memory from /data/app/~~_dVrriJRajAtRrgPzNV3qQ==/com.test.jnitest-MEaj31G59slbtWaw_EWZxw==/base.apk!classes4.dex] (com.test.jnitest.MainActivity.onCreate+98)
    
  3. 工具路径
    addr2line一般位于toolchains目录对应平台/CPU架构/位数32或64目录下
    如:ndk\21.4.7075529\toolchains\aarch64-linux-android-4.9\prebuilt\windows-x86_64\bin
    aarch64-linux-android-4.9:so库为arm架构 64位
    arm-linux-androideabi-4.9:so库为arm架构 32位

  4. 运行命令
    将so库复制到addr2line目录下,然后执行addr2line 工具将输出源代码位置,指示出问题发生的文件和行号:

     $ aarch64-linux-android-addr2line -C -f -e libjnitest.so 000000000002840cJava_com_test_jnitest_TestLib_stringFromJNID:/workspace/JniTest/app/src/main/cpp/native-lib.cpp:5
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/72831.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python中的日期和时间(二)time和calendar模块

time模块 time 模块既有时间处理的&#xff0c;也有转换时间格式的。time模块有许多UNIX和C的痕迹&#xff0c;它们很像的与UNIX和C的函数&#xff0c;可以和C进行通用。理解上如果对C不是很了解&#xff0c;可能会存在一些困难&#xff0c;在写C接口时&#xff0c;可能会用到…

Centos7 Yum安装PHP7.2

1、安装源 安装php72w&#xff0c;是需要配置额外的yum源地址的&#xff0c;否则会报错不能找到相关软件包。 php高版本的yum源地址&#xff0c;有两部分&#xff0c;其中一部分是epel-release&#xff0c;另外一部分来自webtatic。如果跳过epel-release的话&#xff0c;安装…

基于YOLOv8和WiderFace数据集的人脸目标检测系统(PyTorch+Pyside6+YOLOv8模型)

摘要&#xff1a;基于YOLOv8和WiderFace数据集的人脸目标检测系统可用于日常生活中检测与定位人脸目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的目标检测&#xff0c;另外本系统还支持图片、视频等格式的结果可视化与结果导出。本系统采用YOLOv8目标检测算…

【KRouter】一个简单且轻量级的Kotlin Routing框架

【KRouter】一个简单且轻量级的Kotlin Routing框架 KRouter&#xff08;Kotlin-Router&#xff09;是一个简单而轻量级的Kotlin路由框架。 具体来说&#xff0c;KRouter是一个通过URI来发现接口实现类的框架。它的使用方式如下&#xff1a; val homeScreen KRouter.route&l…

4. Java 的线程安全机制之`volatile`

前言&#xff1a;在多线程编程过程中&#xff0c;线程安全是一个非常重要的概念&#xff0c;它有助于保证多线程程序的正确性和健壮性。其中&#xff0c;volatile是实现线程安全的一种方式&#xff0c;保证内存的立马可见&#xff0c;下面将会详细介绍。 文章目录 是什么为什么…

OpenCV(三十二):轮廓检测

1.轮廓概念介绍 在计算机视觉和图像处理领域中&#xff0c;轮廓是指在图像中表示对象边界的连续曲线。它是由一系列相邻的点构成的&#xff0c;这些点在边界上连接起来形成一个封闭的路径。 轮廓层级&#xff1a; 轮廓层级&#xff08;Contour Hierarchy&#xff09;是指在包含…

雅思 《九分达人》阅读练习(二)

目录 雅思阅读练习 《九分达人》test3 paragraph3 1.单词含义要记准确&#xff0c;敏感度要上来。 2.找准定位&#xff0c;之后理解句子大致含义。 说说关于判断题的做题方法 关于“承认”有哪些单词 同替词汇 think 可以用什么其他单词来替换 单词 一些疑问 I have…

win10 sourcetree打开一闪就退出

参考文档: 解决方案参考文档一: Solved: cant install Sourcetree on Windows 10Solved: when I double-click the installation file or run as administrator,I can see a splash screen and disappear in 10 seconds,then I open thehttps://community.atlassian.com/t5…

【C++】vector的模拟实现【完整版】

目录 一、vector的默认成员函数 1、vector类的大体结构 2、无参构造函数 3、拷贝构造函数 4、Swap(operator需要用) 5、赋值重载operator 6、析构函数 二、vector的三种遍历方式 1、size和capacity(大小和容量) 2、 operator[]遍历 3、迭代器iterator遍历和范围for 三…

multiple JSON fields named delFlag

错误原因 如果A是父类&#xff0c;A类有一个字段a&#xff0c;如果B类继承了A类&#xff0c;并且&#xff0c;B类也定义一个a 继承又涉及到覆盖和的问题&#xff0c;就是子类和父类可以同时有用一个方法或者变量&#xff0c;但是在类的继承使用过程没有问题&#xff0c;但是G…

LA@二次型分类@正定二次型@主子式

文章目录 abstract引言正定二次型小结可逆线性变换不改变二次型的正定性二次型是正定的充要条件推论:正定矩阵和特征值正定二次型(正定矩阵)性质 负定二次型负定二次型判定条件 k阶顺序主子式赫尔维茨定理:主子式判定二次型正定性和负定性 二次型分类小结有定二次型不定二次型 …

php常用算法

许多人都说 算法是程序的核心&#xff0c;一个程序的好于差,关键是这个程序算法的优劣。作为一个初级phper&#xff0c;虽然很少接触到算法方面的东西 。但是对于冒泡排序&#xff0c;插入排序&#xff0c;选择排序&#xff0c;快速排序四种基本算法&#xff0c;我想还是要掌握…

微信h5扫码接口范例:多个扫码框支持的办法,通过引入一个参数来区分及使用localStorage保证之前扫到的数据不丢失

测试方法&#xff1a; 多个扫码框支持的办法&#xff0c;通过引入一个参数来区分及使用localStorage保证之前扫到的数据不丢失 测试效果&#xff1a; 页面打开后尝试点击不同的扫码按钮去扫描看看&#xff0c;会发现扫的值不会错乱&#xff0c;都会显示到对应的输入框中。 &l…

Oracle数据库环境变量配置以及可能遇到的问题解决

一、如何配置Oracle数据库环境变量&#xff08;以win10为例&#xff09; 1、找到此电脑&#xff0c;鼠标右键&#xff0c;点击属性。 2、点击属性成功后&#xff0c;进入如下页面&#xff0c;找到“高级系统设置”&#xff0c;点击进入。 3、找到环境变量&#xff0c;点击进入…

Capstone 反汇编引擎

文章目录 前言一、Capstone简介二、示例代码 前言 介绍了capstone反汇编引擎的用法 一、Capstone简介 Capstone 是一个轻量级的多平台、多架构的反汇编框架&#xff0c;用纯 C 语言实现。可以说它是如今世界上最优秀的反汇编引擎&#xff0c;IDA&#xff0c;Radare2&#xf…

Unity Inspector面板上显示Api

serializeField】——将私有类型和保护类型可视化到面板上【System.serializeField】——将自定义类型可视化到面板上【HideIninspector】——将公共变量隐藏【Header&#xff08;“分组说明”&#xff09;】——将可视化变量进行分组【Tooltip&#xff08;“内容说明”&#x…

STM32F4X RTC

STM32F4X RTC 什么是RTCSTM32F4X RTCSTM32F4X RTC框图STM32F4X RTC计数频率STM32F4X RTC日历STM32F4X RTC闹钟 STM32F4X RTC例程 什么是RTC RTC全程叫Real-Time Clock实时时钟&#xff0c;是MCU中一个用来计时的模块。RTC的一个主要作用是用来显示实时时间&#xff0c;就像日常…

pip安装skimage的方法

在安装skimage时&#xff0c;可能会报错误&#xff1a; 可以尝试&#xff1a;pip install scikit-image进行安装&#xff0c;使用时只需要&#xff1a;import skimage

介绍一些开发用到的工具

Sourcetree &#xff1a;Git 界面操作工具&#xff0c;真心好用 uTool&#xff1a;效率工具平台&#xff0c;可以了解一下&#xff0c;提供了很多强大的工具&#xff0c;加强了对电脑的操作 MobaXterm&#xff1a;带有 X11 服务器、选项卡式 SSH 客户端、网络工具等的增强型 Wi…

《消息队列》专栏介绍

《消息队列》专栏介绍 目录 《消息队列》专栏介绍专栏导言什么是消息队列呢&#xff1f;应用场景&#xff08;作用&#xff09; 为什么要用消息队列呢&#xff1f;异步处理削峰填谷 举个例子 分布式消息队列的优势 应用解耦优点发布订阅优点 分布式消息队列应用场景不同消息队列…