Ndk c++层 crash问题分析

news2024/11/23 12:46:55

首先你要从设备上拿到墓碑文件:tombstone,这里面会记录系统崩溃时的信息。位置在/data/tombstones目录下(Logcat中也会有相应的信息),文件的确就像墓碑一样记录了死亡了的进程的基本信息(例如进程的进程号,线程号),死亡的地址(在哪个地址上发生了 Crash),死亡时的现场是什么样的(记录了一系列的堆栈调用信息)等等,里面会有多个tombstone 可以用ll命令来查看时间来区分找到你要找的那个时间的crash。以我正在处理的问题为例看一下tombstone的样子:


Build fingerprint: ‘Android/rk3399_all/rk3399_all:7.1.2/NHG47K/crh12271002:eng/test-keys’
Revision: ‘0’
ABI: ‘arm’
pid: 6657, tid: 6670, name: Binder:6657_2 >>> com.dcm360.robot <<<
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0
r0 00000000 r1 11535ca6 r2 f4d00500 r3 00000080
r4 f30aef55 r5 e9005460 r6 85973e40 r7 f41e4008
r8 00000000 r9 00000010 sl f0f966a0 fp 00000000
ip f41df948 sp f0f96688 lr f41bec3b pc f42ac8d2 cpsr 600f0030
d0 3239393737383632 d1 2070616548797272
d2 0000003c00000069 d3 0000000000000070
d4 0000000000000020 d5 0000000000000008
d6 00000000f1096b10 d7 00000000f1096b30
d8 0000278900001a01 d9 0000000000000000
d10 0000000000000000 d11 0000000000000000
d12 0000000000000000 d13 0000000000000000
d14 0000000000000000 d15 0000000000000000
d16 2e74736973726570 d17 2e6761742e676f6c
d18 000000000001c5c8 d19 00000000000166f0
d20 0000000000000000 d21 0000000000000000
d22 656d72612c613776 d23 0000000000000000
d24 0000003f0000003f d25 0000000000000000
d26 0000000000000000 d27 0000000000000000
d28 0000000000000000 d29 0000000000000000
d30 0000000000000000 d31 00000000003a6151
scr 80000093

backtrace:
#00 pc 000b28d2 /system/lib/libandroid_runtime.so (_ZN16JNICameraContext11copyAndPostEP7_JNIEnvRKN7android2spINS2_7IMemoryEEEi+45)
#01 pc 000b2cb3 /system/lib/libandroid_runtime.so (_ZN16JNICameraContext8postDataEiRKN7android2spINS0_7IMemoryEEEP21camera_frame_metadata+118)
#02 pc 0002437b /system/lib/libcamera_client.so (_ZN7android6Camera12dataCallbackEiRKNS_2spINS_7IMemoryEEEP21camera_frame_metadata+66)
#03 pc 00029847 /system/lib/libcamera_client.so (_ZN7android8hardware14BnCameraClient10onTransactEjRKNS_6ParcelEPS2_j+370)
#04 pc 000359f3 /system/lib/libbinder.so (_ZN7android7BBinder8transactEjRKNS_6ParcelEPS1_j+70)
#05 pc 0003d1eb /system/lib/libbinder.so (_ZN7android14IPCThreadState14executeCommandEi+702)
#06 pc 0003ce37 /system/lib/libbinder.so (_ZN7android14IPCThreadState20getAndExecuteCommandEv+114)
#07 pc 0003d34b /system/lib/libbinder.so (_ZN7android14IPCThreadState14joinThreadPoolEb+46)
#08 pc 0004f8f5 /system/lib/libbinder.so
#09 pc 0000e345 /system/lib/libutils.so (_ZN7android6Thread11_threadLoopEPv+140)
#10 pc 0006675d /system/lib/libandroid_runtime.so (_ZN7android14AndroidRuntime15javaThreadShellEPv+80)
#11 pc 000470c3 /system/lib/libc.so (_ZL15__pthread_startPv+22)
#12 pc 00019e3d /system/lib/libc.so (__start_thread+6)

stack:
f0f96648 00000000
f0f9664c 00000000
f0f96650 00010001
f0f96654 00000000
f0f96658 f0f96680
f0f9665c 00000000
f0f96660 11535ca6
f0f96664 f30aef55 /system/lib/libbinder.so (_ZNK7android8BpMemory9getMemoryEPiPj)
f0f96668 e9005460 [anon:libc_malloc]
f0f9666c 85973e40 [anon:libc_malloc]
f0f96670 f41e4008 [anon:.bss]
f0f96674 00000000
f0f96678 00000010
f0f9667c f0f966a0
f0f96680 00000000
f0f96684 f42ac8d1 /system/lib/libandroid_runtime.so (_ZN16JNICameraContext11copyAndPostEP7_JNIEnvRKN7android2spINS2_7IMemoryEEEi+44)
#00 f0f96688 00000000
f0f9668c f30c2e01 /system/lib/libbinder.so (_ZN7android12ProcessState23getStrongProxyForHandleEi+104)
f0f96690 f4932180 [anon:libc_malloc]
f0f96694 e66ef92c [anon:libc_malloc]
f0f96698 00000000
f0f9669c 00000000
f0f966a0 00000000
f0f966a4 11535ca6
f0f966a8 11535ca6
f0f966ac 85973e40 [anon:libc_malloc]
f0f966b0 f41e4008 [anon:.bss]
f0f966b4 f0f966e0
f0f966b8 e9005460 [anon:libc_malloc]
f0f966bc 00000000
f0f966c0 00000010
f0f966c4 f0f96730
… …

拿到这个文件了,可以看到上面记录的是crash .so 的地址,有两种方式处理,但也要分情况选择,如果你有设备来测试,并且知道如何去复现这个crash 那你可以用ndk-stack来直接将crash翻译成指向代码的容易理解的log,现在是指向地址的tomstone,其实这种也就不需要tomstone了,前提是你要判断出来,crash时因为c++ native层的,我就不具体解释ndk-stack怎么使用了,如果后面观众老爷留言有需要我再补吧,也是ndk带的一个工具。而当你不知道怎么复现,或者不是必现的情况,设备也不在身边,不方便直接处理。那你可以根据tomstone里面的地址,用addr2line 对tomstone 记录的so文件的地址进行转换成能看懂的代码出处,从而找到问题所在。下面是实操,先弄到so文件,这个so文件,可能是你自己项目里面的so文件,那它的地址你是知道的,也可能是系统的so文件,在设备上,以我这次为例,就需要adb pull 去把so文件拉下到电脑上,
在这里插入图片描述我要找到so在/system/lib/下面。

然后用命令去拿对映射对应的代码:
/home/zhouzhihao/Android/Sdk/ndk/21.4.7075529/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-addr2line -C -f -e libc.so 000470c3 00019e3d
addr2line 是ndk里面的一个工具 后面的地址对应就是tomstone上面记录的地址。

在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
以上就是从/system/lib/下面不同的so文件对应的代码位置。

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

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

相关文章

FlashAttention和PagedAttention

FlashAttention FlashAttention一般指的是FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness这篇&#xff0c;当然Transformer Quality in Linear Time这篇里非要说FLASH Fast Linear Attention with a Single Head&#xff0c;命名有点无语&…

JavaScript数据存储方式

内置对象 js内部提供的对象&#xff0c;包含各种属性和方法给开发者调用 document.write() console.log() Math Math对象是js提供的一个 “数学”对象&#xff0c;提供了一系列做数学运算的方法 max找最大值Math.max(3,8,5,4) 返回8min找最小值Math.min(3,8,5,4) 返回4ab…

printf不一样的玩法

Printf不一样的玩法 ❝ 在使用linux终端命令的时候&#xff0c;我们可以看到像more命令&#xff0c;它的显示方式与一般的字符串不同&#xff0c;是用了反显。同样&#xff0c;linux C下printf还有很多其他不常见的格式化输出形式。本文主要为你盘点这些形式。 ❞ 先看下效果&a…

MySQL:单行函数(全面详解)

MySQL&#xff1a;单行函数 前言一、函数的理解1、什么是函数2、不同DBMS函数的差异3、MySQL的内置函数及分类 二、数值函数1、基本函数2、角度与弧度互换函数3、三角函数4、指数与对数5、进制间的转换 三、字符串函数四、日期和时间函数1、获取日期、时间2、日期与时间戳的转换…

Bpmn.js流程建模结合业务整合工作流(二)

上一篇文章讲述了bpmn.js的基本搭建使用过程,下面介绍工具栏的按钮使用 以及右侧属性如何绑定到节点保存的 保存方法 /** 保存xml */async save() {await this.getNewXML() //获取最新的xmlawait this.getRootElement() //获取流程基本信息 节点信息const params = {name: th…

SSM+校园网上订餐系统 毕业设计-附源码211510

校园网上订餐系统的设计与实现 摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对校园网上订…

API 接口协作,swagger不再是第一选择了

目录 一、前言 1.1. 场景一、后端视角&#xff1a; 1.2. 场景二、前端视角&#xff1a; 1.3. 场景三、测试视角&#xff1a; 二、Apifox 2.1 场景一、后端视角&#xff1a; 漂亮的接口文档 2.2 场景二、前端视角&#xff1a; 2.3 场景三、测试视角&#xff1a; 三、总…

SOAP教程

参考 SOAP 教程 1、介绍 SOAP 中文解释为&#xff1a;简单对象访问协议。 SOAP 是一种简单的基于 XML 的协议&#xff0c;它使应用程序通过 HTTP 来交换信息。 SOAP 是基于 XML 的简易协议&#xff0c;可使应用程序在 HTTP 之上进行信息交换。或者更简单地说&#xff1a;SOAP…

ASP.NET Core Web API之Token验证

在实际开发中&#xff0c;我们经常需要对外提供接口以便客户获取数据&#xff0c;由于数据属于私密信息&#xff0c;并不能随意供其他人访问&#xff0c;所以就需要验证客户身份。那么如何才能验证客户的身份呢&#xff1f;今天以一个简单的小例子&#xff0c;简述ASP.NET Core…

一、枚举类型——使用枚举类型分发

如果将 RoShamBo1.java 直接转换为基于枚举的实现版本&#xff0c;则会出现问题。因为枚举实例并不是类型&#xff0c;所以无法重载 eval() 方法&#xff0c;你无法将枚举实例作为参数类型。不过&#xff0c;还有别的方法可以利用枚举来实现多路分发。 一种方法是通过构造方法…

实战:SonarQube平台安装配置-2023.6.24(安装成功)(docker方式)

实战&#xff1a;SonarQube平台安装配置-2023.6.24(安装成功)(docker方式) 目录 推荐文章 https://www.yuque.com/xyy-onlyone/aevhhf?# 《玩转Typora》 实验环境 sonarqube:9.9.0-community (docker方式部署) SonarScanner 4.8.0.2856 (部署在宿主机上)实验软件 链接&…

开关电源-PFC驱动电路的工作原理

PFC驱动电路的工作原理 由于PFC的控制地和MOS管组成的双向开关的源极不共地&#xff0c;因此需要解决开关管浮地驱动问题。 图2 驱动电路图 电路图说明&#xff1a; PFCPWM是DSP的PWM信号&#xff1b;VCC_4V和AGND是DSP侧的电源和控制地&#xff1b;Vccp_14V和AGND_DRV是MO…

echarts 的 一个图表容器,使用grid存放多个折线图,并配置x轴联动

效果图 配置参数 // prettier-ignore const data [["2000-06-05", 116], ["2000-06-06", 129], ["2000-06-07", 135], ["2000-06-08", 86], ["2000-06-09", 73], ["2000-06-10", 85], ["2000-06-11",…

开关电源- 用PFC拓扑电路对比

用PFC拓扑电路对比 最基本的有桥boost PFC电路 有桥boostPFC电路是最基本的电路&#xff0c;就不叙述了。 双Boost无桥PFC 双boost无桥拓扑的优点是使用功率元件比较少, 两个管子可以一起驱动, 这简化了驱动电路的设计, 同时让直接使用传统APFC的控制芯片成为可能.但是这种拓扑…

3.41 - haas506与esp8266-01s的串口通信(TCP透传)

haas506与esp8266-01s的串口通信 PC端调试wifi模块1.接线(与电脑通信)2.模式案例3.指令演示 开发板与wifi模块通信1.接线(TTL串口通信)2.代码测试 PC端调试wifi模块 esp8266-01s 1.接线(与电脑通信) 与电脑通信时引脚连接&#xff0c;wifi模块需要稳定3.3v供电&#xff0c;…

一个618项目的复盘总结反思

一、前言 618期间上线一个活动项目。但上线不顺利&#xff0c;当天就出现了性能问题&#xff0c;接口超时&#xff0c;用户无法打开网页&#xff0c;最后不得的临时下线。花了三天两夜&#xff0c;重构了后台核心代码&#xff0c;才让活动进行下去。 回头看了一下自己的时间记…

【零基础入门学习Python---Python条件和循环语句】

&#x1f680; Python &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

OpenCV下载、环境变量配置

https://sourceforge.net/projects/opencvlibrary/files/ 选择合适的版本下载即可 这里使用opencv-3.1.0.exe执行 将需要bin目录加入到环境变量Path D:\opencv\31\opencv\build\x64\vc14\bin #include<opencv2/opencv.hpp> #include <iostream> using namespace …

【学习日记2023.6.25】之ElasticSearch搜索引擎

文章目录 分布式搜索引擎1.初识elasticsearch1.1.了解ES1.1.1.elasticsearch的作用1.1.2 ELK技术栈1.1.3 elasticsearch和lucene1.1.4 为什么不是其他搜索技术&#xff1f;1.1.5 总结 1.2 倒排索引1.2.1 正向索引1.2.2 倒排索引1.2.3 正向和倒排 1.3 es的一些概念1.3.1 文档和字…

[Web程序设计]实验: Servlet基础应用

一、实验目的 &#xff08;1&#xff09;掌握java web应用的基础和核心知识&#xff1a;servlet。 &#xff08;2&#xff09;理解servlet的具体使用。 二、实验内容 &#xff08;1&#xff09;编写一个servlet&#xff0c;实现统计网站被访问次数的功能&#xff1b; &…