Android JNI 异常定位(2)—— addr2line

Android native报错有时候只有一句 signal 11 (SIGSEGV),这种情况仅通过log是很难定位到问题的。不过Android 在/data/tombstones目录保存了错误的堆栈信息,为定位bug提供了路径。不过一般这里的log都无法像java一样直接定位的出错的行数。如下图:

--------- beginning of crash
11-21 11:31:40.633 F/libc    ( 1127): Fatal signal 11 (SIGSEGV), code 1, fault addr 0xcbb45812 in tid 1260 (RenderThread)
11-21 11:31:40.633 W/        (  203): debuggerd: handling request: pid=1127 uid=1000 gid=1000 tid=1260
11-21 11:31:40.646 E/JNI_MANAGER( 1127): WebRtcAecm_BufferFarend
11-21 11:31:40.647 E/JNI_MANAGER( 1127): WebRtcAecm_BufferFarend
11-21 11:31:40.731 F/DEBUG   ( 2352): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
11-21 11:31:40.732 F/DEBUG   ( 2352): Build fingerprint: 'Android/rk3288/rk3288:7.1.2/NHG47K/zoeyli08041021:userdebug/test-keys'
11-21 11:31:40.732 F/DEBUG   ( 2352): Revision: '0'
11-21 11:31:40.733 F/DEBUG   ( 2352): ABI: 'arm'
11-21 11:31:40.734 F/DEBUG   ( 2352): pid: 1127, tid: 1260, name: RenderThread  >>> com.intercom.supervisor <<<
11-21 11:31:40.734 F/DEBUG   ( 2352): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0xcbb45812
11-21 11:31:40.735 F/DEBUG   ( 2352):     r0 7f1d9fc0  r1 900f4ef8  r2 cbb457f2  r3 01000000
11-21 11:31:40.735 F/DEBUG   ( 2352):     r4 900f4f20  r5 7ed04880  r6 00000004  r7 00000001
11-21 11:31:40.736 F/DEBUG   ( 2352):     r8 7ed04830  r9 900f4f60  sl 900f4f20  fp 00000001
11-21 11:31:40.736 F/DEBUG   ( 2352):     ip a358dba8  sp 900f4ef0  lr a1d558b0  pc a1d5f518  cpsr 20070010
11-21 11:31:40.750 W/AudioFlinger(  234): RecordThread: buffer overflow
11-21 11:31:40.794 F/DEBUG   ( 2352): 
11-21 11:31:40.794 F/DEBUG   ( 2352): backtrace:
11-21 11:31:40.794 F/DEBUG   ( 2352):     #00 pc 0043e518  /vendor/lib/egl/libGLES_mali.so
11-21 11:31:40.794 F/DEBUG   ( 2352):     #01 pc 004348ac  /vendor/lib/egl/libGLES_mali.so
11-21 11:31:40.794 F/DEBUG   ( 2352):     #02 pc 00326090  /vendor/lib/egl/libGLES_mali.so
11-21 11:31:40.794 F/DEBUG   ( 2352):     #03 pc 00323b1c  /vendor/lib/egl/libGLES_mali.so
11-21 11:31:40.794 F/DEBUG   ( 2352):     #04 pc 00447a60  /vendor/lib/egl/libGLES_mali.so
11-21 11:31:40.794 F/DEBUG   ( 2352):     #05 pc 00455750  /vendor/lib/egl/libGLES_mali.so
11-21 11:31:40.795 F/DEBUG   ( 2352):     #06 pc 004503dc  /vendor/lib/egl/libGLES_mali.so
11-21 11:31:40.795 F/DEBUG   ( 2352):     #07 pc 0044e8b8  /vendor/lib/egl/libGLES_mali.so
11-21 11:31:40.795 F/DEBUG   ( 2352):     #08 pc 0044f18c  /vendor/lib/egl/libGLES_mali.so
11-21 11:31:40.795 F/DEBUG   ( 2352):     #09 pc 0044f260  /vendor/lib/egl/libGLES_mali.so
11-21 11:31:40.795 F/DEBUG   ( 2352):     #10 pc 003ab1ac  /vendor/lib/egl/libGLES_mali.so
11-21 11:31:40.795 F/DEBUG   ( 2352):     #11 pc 0038664c  /vendor/lib/egl/libGLES_mali.so
11-21 11:31:40.795 F/DEBUG   ( 2352):     #12 pc 00695288  /vendor/lib/egl/libGLES_mali.so
11-21 11:31:40.796 F/DEBUG   ( 2352):     #13 pc 0069e3bc  /vendor/lib/egl/libGLES_mali.so (eglMakeCurrent+1488)
11-21 11:31:40.796 F/DEBUG   ( 2352):     #14 pc 0000ac41  /system/lib/libEGL.so (_ZN7android13egl_display_t11makeCurrentEPNS_13egl_context_tES2_PvS3_S3_S3_S3_S3_+192)
11-21 11:31:40.796 F/DEBUG   ( 2352):     #15 pc 0000d497  /system/lib/libEGL.so (eglMakeCurrent+290)
11-21 11:31:40.796 F/DEBUG   ( 2352):     #16 pc 000263e9  /system/lib/libhwui.so
11-21 11:31:40.796 F/DEBUG   ( 2352):     #17 pc 0002667d  /system/lib/libhwui.so
11-21 11:31:40.796 F/DEBUG   ( 2352):     #18 pc 0002344b  /system/lib/libhwui.so
11-21 11:31:40.796 F/DEBUG   ( 2352):     #19 pc 00023339  /system/lib/libhwui.so
11-21 11:31:40.796 F/DEBUG   ( 2352):     #20 pc 000272e5  /system/lib/libhwui.so
11-21 11:31:40.797 F/DEBUG   ( 2352):     #21 pc 00028117  /system/lib/libhwui.so
11-21 11:31:40.797 F/DEBUG   ( 2352):     #22 pc 00028857  /system/lib/libhwui.so
11-21 11:31:40.797 F/DEBUG   ( 2352):     #23 pc 00029139  /system/lib/libhwui.so (_ZN7android10uirenderer12renderthread12RenderThread10threadLoopEv+80)
11-21 11:31:40.797 F/DEBUG   ( 2352):     #24 pc 0000e325  /system/lib/libutils.so (_ZN7android6Thread11_threadLoopEPv+144)
11-21 11:31:40.797 F/DEBUG   ( 2352):     #25 pc 00067f29  /system/lib/libandroid_runtime.so (_ZN7android14AndroidRuntime15javaThreadShellEPv+80)
11-21 11:31:40.797 F/DEBUG   ( 2352):     #26 pc 00047323  /system/lib/libc.so (_ZL15__pthread_startPv+22)
11-21 11:31:40.797 F/DEBUG   ( 2352):     #27 pc 00019e5d  /system/lib/libc.so (__start_thread+6)
11-21 11:31:41.277 I/AudioFlinger(  234): BUFFER TIMEOUT: remove(4098) from active list on thread 0xad983d00
11-21 11:31:41.742 E/        ( 2352): debuggerd: failed to kill process 1127: No such process
11-21 11:31:41.748 W/        (  203): debuggerd: resuming target 1127
11-21 11:31:41.750 I/BootReceiver(  485): Copying /data/tombstones/tombstone_05 to DropBox (SYSTEM_TOMBSTONE)
  • 先看崩溃的tid:1260,不是主线程,说明是子线程。
  • 最后一行/data/tombstones/tombstone_05提示异常日志保存在了tombstone_05文件里面
    在这里插入图片描述

backtrace需要借助Android ndk提供的addr2line工具来分析,从工具的名字就能看出来,这个东西可以帮我们把报错的地址指向代码行,以协助我们排查问题。
看工具的使用方式:

1.找到本地ndk路径下的addr2line的程序

我的路径“D:\Android\ndk\android-ndk-r10e\toolchains\aarch64-linux-android-4.9\prebuilt\windows-x86_64\bin”
在这里插入图片描述
这里需要注意toolchains下根据系统架构区分多个目录,需要根据自己运行的系统进行区分,否则会报File format not recognized 错误。我的是64位系统,所以选了图示目录

在这里插入图片描述

2.打开命令行跳转至该目录

2.1、直接在路径下输入cmd,然后按enter键,就可以直接打开命令行窗口,并且跳转到该路径下面

在这里插入图片描述
在这里插入图片描述

3.使用addr2line -e命令

aarch64-linux-android-addr2line -e D:\Android\AndroidStudio\Project\ManagerJni\obj\local\armeabi\intercomManager.so 00019e5d

在这里插入图片描述

  • 红色1、so库必须是带有符号表的
  • 红色2、为异常的地址
  • 最后一行就转换出了异常所在的行

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

YOLO目标检测——卫星遥感舰船检测数据集下载分享【含对应voc、coco和yolo三种格式标签】

实际项目应用&#xff1a;卫星遥感舰船检测数据集说明&#xff1a;卫星遥感舰船检测数据集&#xff0c;真实场景的高质量图片数据&#xff0c;数据场景丰富&#xff0c;含船一个类别标签说明&#xff1a;使用lableimg标注软件标注&#xff0c;标注框质量高&#xff0c;含voc(xm…

HTTPS协议的加密流程

目录 一&#xff0c;HTTPS是什么 二&#xff0c;两种加密方式 三&#xff0c;HTTPS的加密过程 3.1 引入对称加密 3.2 引入非对称加密 3.3 引入证书 一&#xff0c;HTTPS是什么 HTTPS也是一个应用层协议&#xff0c;它是在HTTP协议的基础上引入了一个加密层。因为HTTP协议…

边云协同架构设计

文章目录 一. "边云协同"是什么&#xff1f;二. "边云协同"主要包括6种协同2.1 资源协同2.2 数据协同2.3 智能协同2.4 应用管理协同2.5 业务管理协同2.6 服务协同 三. "边云协同"的优势 其它相关推荐&#xff1a; 系统架构之微服务架构 系统架构…

自动化测试学习指南

软件自动化测试的学习步骤 大概步骤如下&#xff1a; 1. 做好手工测试&#xff08;了解各种测试的知识&#xff09;-> 2. 学习编程语言-> 3. 学习Web基础&#xff08;HTML,HTTP,CSS,DOM,Javascript&#xff09;或者 学习Winform -> 4. 学习自动化测试工具 ->5.…

C++ Day04 this指针,友元函数,重载

this指针 概念 谁调用 this 所在的函数 ,this 就存储谁的地址 特点 1, 在当前类的非静态成员函数中调用本类非静态成员时 , 默认有 this 关键字 2, 静态成员函数 , 没有 this 指针。 示例 #include <iostream> #include <cstring> using namespace std; class S…

stm32定时器输入捕获模式

频率测量 频率测量有两种方法 测频法&#xff1a;在闸门时间T内&#xff0c;对上升沿或下降沿计次&#xff0c;得到N&#xff0c;则评率fxN/T测周法&#xff1a;两个上升沿内&#xff0c;以标准频率fc计次得到N&#xff0c;则频率fx fc/N中界频率&#xff1a;测频法和测周法误…

学习MySQL先有全局观,细说其发展历程及特点

学习MySQL先有全局观&#xff0c;细说其发展历程及特点 一、枝繁叶茂的MySQL家族1. 发展历程2. 分支版本 二、特点分析1. 常用数据库2. 选型角度及场景 三、三大组成部分四、总结 相信很多同学在接触编程之初&#xff0c;就接触过数据库&#xff0c;而对于其中关系型数据库中的…

【C++】类和对象——构造函数和析构函数

今天要学习两个特殊的函数&#xff0c;分别是构造函数和析构函数&#xff0c;它们究竟有什么用呢&#xff1f; 比如说&#xff0c;我们先写一个简单的日期的类 class Date { public:void Init() {_year 1;_month 1;_day 1;}void Print() {cout << _year << &qu…

JavaScript 运行机制

文章目录 JavaScript 运行机制目标知识要点一、进程与线程1.1 概念1.2 区别1.3 多进程与多线程1.4 JS 为什么是单线程1.5 浏览器1.5.1 浏览器包含哪些进程1.5.2 为什么浏览器要多进程1.5.3 渲染进程1.5.3.1 GUI 渲染线程1.5.3.2 JS 引擎线程1.5.3.3 事件触发线程1.5.3.4 定时触…

Windows权限维持方法论

Windows权限维持方法论 1.注册表自启动2.组策略设置脚本启动3.计划任务4.服务自启动5.dll劫持6.直接上远程控制木马 1.注册表自启动 通过修改注册表自启动键值&#xff0c;添加一个木马程序路径&#xff0c;实现开机自启动 常用的注册表启动键&#xff1a; # Run键 HKEY_CU…

echarts移动markline(拖拽单条markline)

echarts移动markline&#xff08;拖拽单条markline&#xff09; 效果 问题由来&#xff1a; 图表中需要一个移动的标线&#xff0c;辅助观察图表&#xff1b; 想法&#xff1a; 意思是在原来点或者原来标线上新增一个图层&#xff0c;拖动图层动态绘制新的点或者新的标线; 参考…

【C++初阶】STL详解(五)List的介绍与使用

本专栏内容为&#xff1a;C学习专栏&#xff0c;分为初阶和进阶两部分。 通过本专栏的深入学习&#xff0c;你可以了解并掌握C。 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;C &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库&…

万字解析:十大排序(直接插入排序+希尔排序+选择排序+堆排序+冒泡排序+快速排序+归并排序+计数排序+基数排序+桶排序)

文章目录 十大排序排序算法复杂度及稳定性分析一、 排序的概念1.排序&#xff1a;2.稳定性&#xff1a;3.内部排序&#xff1a;4.外部排序&#xff1a; 二、插入排序1.直接插入排序2.希尔排序 三、选择排序1.直接选择排序方法一方法二直接插入排序和直接排序的区别 2.堆排序 四…

这是大学生就业网站最基础的布局。

<!DOCTYPE html> <html> <head> <title>大学生就业网站</title> <style> /* Reset default margin and padding */ *, *::before, *::after { margin: 0; padding: 0; box-s…

算法刷题-动态规划2

算法刷题-动态规划2 珠宝的最高价值下降路径最小和 珠宝的最高价值 题目 大佬思路 多开一行使得代码更加的简洁 移动到右侧和下侧 dp[ i ][ j ]有两种情况&#xff1a; 第一种是从上面来的礼物最大价值&#xff1a;dp[ i ][ j ] dp[ i - 1 ][ j ] g[ i ][ j ] 第二种是从左…

FPGA设计时序约束九、others类约束之Group Path

目录 一、序言 二、Group Path 2.1 基本概念 2.2 设置界面 2.3 命令语法 2.4 命令示例 三、工程示例 四、参考文件 一、序言 在Vivado的时序约束窗口中&#xff0c;存在一类特殊的约束&#xff0c;划分在others目录下&#xff0c;可用于设置忽略或修改默认的时序路径分…

如何判断客户对你是不是真的满意

我们平时生活中打个滴滴、叫个外卖&#xff0c;都会让做星级评价&#xff0c;就算去银行办业务&#xff0c;也会让按个按钮&#xff0c;对窗口的服务做个评价…… 再问一个问题&#xff1a;客户满意了&#xff0c;您的生意就一定好吗&#xff1f; 一、满意度&#xff1a;质量监…

EDIFACT学习手册

EDIFACT 又名 UN/EDIFACT&#xff08;全称为 United Nations/Electronic Data Interchange For Administration, Commerce and Transport&#xff09;&#xff0c;是由联合国主导开发制定的国际通用 EDI 标准。EDI术语中的EDIFACT是指 EDIFACT 报文标准&#xff0c;本视频将为大…

python接口自动化封装导出excel方法和读写excel数据

一、首先需要思考&#xff0c;我们在页面导出excel&#xff0c;用python导出如何写入文件的 封装前需要确认python导出excel接口返回的是一个什么样的数据类型 如下&#xff1a;我们先看下不对返回结果做处理&#xff0c;直接接收数据类型是一个对象&#xff0c;无法获取返回…

Postman API Enterprise 10.18.1 Crack

适合您企业的 Postman API 平台 掌控您的 API 环境。构建更好的 API。加快产品开发。 无论您处于 API 之旅的哪个阶段&#xff0c;Postman 都会为您提供帮助 想让您团队的 API 更容易被发现吗&#xff1f;希望减少开发和质量检查之间的滞后时间&#xff1f;想要更快地让新开发…