Android系统异常问题分析(死机,重启,无法启动,启动异常等)

news/2024/7/23 23:54:54 标签: android

Android系统异常问题处理流程(死机,重启,无法启动,启动异常等)
1 addr2line工具
作用:把native的出错堆栈信息对应到代码的行数
通过find . -name * addr2line来搜索这个工具
查看出错的堆栈信息,xx.so库出问题,然后分析这个库的堆栈信息
根据出错的二进制地址和出错的库名就可以使用addr2line找出错误的行数
命令:addr2line  /xx.so  0015b6d5然后回车
然后继续看错误堆栈

2 Android死机
观察死机之前的log信息,一般都会有堆栈信息打印,根据这些堆栈信息找到哪个函数或者方法引起
一般先检查是不是内核异常死机,包括CPU和内存是否用完
再看看getevent是否上报,如果不上报,找出不上报原因(获取 input 输入事件,比如获取按键上报信息、获取触摸屏上报信息等)
或者看看inputDispatch是否出现异常导致无法分发事件
如果event没有问题,去分析surfacefinger和LCD驱动,看看是不是界面没有刷新导致的死机问题

3 android系统重启
分为三类,分别是内核重启,modem重启,framework重启
怎么判断是哪类?
1 通过重启时间来判断,如果是内核重启和modem重启,那么重启的时间肯定比上层重启的时间长
2 看看重启是否有震动,如果有,就是内核重启或者modem重启,反之是framework重启
3通过ps进程号来判断,如果是framework重启,zygote、servicemanager等的进程号比较大,正常来说zygote的进程号是500左右,如果出现问题的时候,进程号是1000多,framework就得重启
内核重启的标志:sysreboot reason:software EXCE AP,导致它的原因主要是kernel代码出现异常和硬件狗复位
对应kernel代码出现异常,主要是指kernel主动panic或者被动panic,这种情况一般是出现了踩内存、非法指针等错误
medem重启的log:sysreboot reason:software EXCE AP和kernel差不多

framework的重启原因:
1 native crash引起的重启
一般会在tombstone目录下面找到相关的log
2 watchdog杀死systemserver系统进程引起的重启
需要分析anr里面的trace.txt文件,这类问题一般是死锁,首先是搜索system_server,如果没有搜索到,表示这个anr已经被覆盖,这时候去dropbox找到对应时间的文件,到搜索到system_server相关信息后,log会显示阻塞在什么地方,然后跟着它的阻塞的路径,一直追,知道找到真正触发阻塞的原因,这种异常重点关注时间点,一般在这个时间点之前一定有异常出现
3 systemserver进程出现了其他exception引起的重启
比较容易比如空指针等

3 系统启动异常
与framework相关的有三种
1 按电源键,系统无法启动,没有任何反应
一般是硬件故障,需要硬件帮忙
2 按电源键,有反应,但是一直停在开机第一个静态界面,即kernel开机界面
一般是内核问题,需要kernel分析
3 按电源键,有反应,一直停在开机动画界面。即一直停在bootanimation
一般是开机时各种异常所致
可以通过如下步骤定位

1 确定是否进入了zygote进程
log: START com.android.internal.os.ZygoteInit uid
2 如果进入了zygote进程,确定是否进入了systemserver进程
log: Entered the android system server!
3 如果也进入了systemserver进程,再确定进程里的ams服务、wms服务等是否出现问题
adb shell dumpsys activity
adb shell dumpsys window


http://www.niftyadmin.cn/n/240325.html

相关文章

vue3项目使用pdf.js插件实现文本复制、文本搜索内容高亮展示

文章目录 一、pdf.js介绍二、实现pdf预览的两种方式1、使用viewer.html2、将PDF文件渲染成Canvas 一、pdf.js介绍 官网地址:http://mozilla.github.io/pdf.js/ PDF.js是基于HTML5技术构建的,用于展示可移植文档格式的文件(PDF),它可以在现代…

深度学习 - 40. N-Gram 采样与 Session 数据获取 For EGES

目录 一.引言 二.订单数据预处理 1.数据样例 2.订单数据处理 3.用户 Session 构建 三.构造 sku_id 游走序列 1.获取完整 Session List 2.统计 sku_id 转移词频 3.构建 sku_id 图 4.游走构造 sku 序列 四.商品侧信息预处理 1.读取商品信息 2.Left Join 匹配侧信息 …

音游判定原理详解——从触摸屏幕到判定音符【Project SEKAI攻略】

“音乐游戏”一般简称为“音游”,玩家需要配合音乐的节奏来进行一定的动作。 《Project SEKAI》作为一个“移动端音游”,绝大多数玩家会使用手机、平板电脑等移动设备的触摸屏进行游玩,也有极少数的玩家不按常理出牌,使用手台、键…

文件导入导出

文件导出 当涉及到大文件导入和导出时,使用高效的代码非常重要,以避免出现内存溢出等问题。下面是两个高效的大文件导入导出的代码案例。 大文件导入 在导入大文件时,通常可以采用逐行读取数据的方式,以避免将整个文件读入内存…

设计模式-行为型模式之观察者模式

3. 观察者模式 3.1. 模式动机 建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应做出反应。在此,发生改变的对象称为观察目标,而被通知的对象称为观察者,一个观察目标可以对应多…

什么是机器学习?

目录 简介 机器学习可以做什么 机器学习未来的趋势 总结 简介 机器学习是一种人工智能领域中的技术,其主要目的是让计算机能够自动进行模式识别、数据分析和预测。 机器学习的起源可以追溯到20世纪50年代,当时美国的Arthur Samuel在一篇论文中提出了相关…

C#中用程序代码修改了datagridview中的数据,保存时只对光标当前行有保存解决办法

C#中DataGridView绑定了DataTable后,通过代码修改DataGridView中的数据,总有一行(被修改过并被用户选中的行集合中索引为0的行)不能被UpDate回数据库的问题和解决办法 长江黄鹤 2017-06-26 | 300阅读 | 1转藏 转藏全屏朗读分…

java模板/策略模式打怪兽

模板&策略模式 实现姿势 我们会从简单到复杂,讲解代码正确的实现姿势,分别为最 Low 方式、常规方式、模板模式和策略模式。 最 Low 方式 假如现在有 3 个奥特曼,都喜欢 “训练,飞翔,打怪兽” public class OldTig…