如何通过 bugreport 分析 Android 系统日志?

embedded/2025/2/13 15:14:24/

📢 1. 职业规划篇
来聊聊安卓职业规划?整机开发大专能做么?
📢 2.基础篇
基础篇.前言
基础篇.编译环境搭建
基础篇.源码目录简介
基础篇.系统 mk_bp 讲解
基础篇.开机动画定制
基础篇.定制桌面壁纸、导航方式
基础篇.系统属性、api 使用
基础篇.名称修改、名词介绍
基础篇.用 bugreport 带你看 Crash 和 ANR
基础篇.Provision 源码分析

📢 3. 系统应用篇
系统应用篇.开机向导制作一
系统应用篇.开机向导制作二
系统应用篇.Settings 导航切换分析
系统应用篇.开机向导导航切换一
系统应用篇.开机向导导航切换二
系统应用篇.gms 制作集成
系统应用篇.开机向导适配 GMS
系统应用篇.Launcher3 结构剖析一
系统应用篇.Launcher3 结构剖析二
系统应用篇.Launcher3 结构剖析三
系统应用篇.Launcher3 图标加载流程一
系统应用篇.Launcher3 图标加载流程二
系统应用篇.Launcher3 桌面布局定制
系统应用篇.解密 Partner、google PAI 机制
系统应用篇.Partner 机制预制壁纸、默认布局
系统应用篇.Launcher 双排 Hotseat 定制一
系统应用篇.Launcher 双排 Hotseat 定制二
系统应用篇.Launcher 双排 Hotseat 定制三
系统应用篇.Launcher Taskbar 简介以及调出
系统应用篇.SystemUI 篇_用工具教会你看布局、进程
系统应用篇.SystemUI 结构讲解一
系统应用篇.SystemUI 结构讲解二
系统应用篇.SystemUI 的启动流程
系统应用篇.SystemUI 导航栏创建一
系统应用篇.SystemUI 导航栏创建二
系统应用篇.SystemUI 自定义导航按键
系统应用篇.SystemUI 快捷面板下拉流程
系统应用篇.SystemUI 定制禁用锁屏下拉通知栏
系统应用篇.SystemUI 通知注册流程
系统应用篇.SystemUI 通知发送流程

📢 4. 系统篇
系统篇.SystemServer 篇_应用与系统进程间关系
系统篇.SystemServer 简介、自定义 Service 服务一
系统篇.SystemServer 简介、自定义 Service 服务二
系统篇.SystemServer 简介、自定义 Service 服务三
系统篇.SystemServer 简介、自定义 Service 服务四
系统篇.SELinux 问题解决套路一
系统篇.SELinux 问题解决套路二
系统篇.ActivityManagerService 简介
系统篇.WindowManagerService 简介一
系统篇.WindowManagerService 简介二
系统篇.PackageManagerService 简介一
系统篇.PackageManagerService 简介二
系统篇.FW 实战 - Letterbox 定制应用方向一
系统篇.FW 实战 - Letterbox 定制应用方向二
系统篇.分屏流程一
系统篇.分屏流程二

📢 5. 性能篇
(省)低内存优化
性能篇 (省). 低内存查杀机制
性能篇 (省).SystemServer 与 LMK 的 socket 通信
性能篇 (省). 内核进程 LMKD
性能篇 (省). 内存分析
性能篇 (省). 内存泄漏定位与解决
(稳)稳定性优化
性能篇 (稳).WatchDog 检测机制一
性能篇 (稳).WatchDog 检测机制二
性能篇 (稳). 深入 Crash 捕获器流程一
性能篇 (稳). 深入 Crash 捕获器流程二
性能篇 (稳). 深入炸弹 ANR 流程一
性能篇 (稳). 深入炸弹 ANR 流程二
(快)开机优化
性能篇 (快). 开机耗时分析
性能篇 (快). 开机耗时优化
性能篇.实战优化方案分享

framework交流,答疑:251662478

如何通过 bugreport 分析 Android 系统日志?
在 Android 整机开发 & 系统调试 中,bugreport 是最常用的日志分析工具之一。它包含了系统运行的各种关键日志,包括 main.log、event.log、ANR、Crash 等。本文将手把手教你如何从 bugreport 中找出关键信息!🚀

📌 1. 获取 bugreport
在 Android 设备 上,使用 ADB 获取 bugreport:

adb bugreport > bugreport.zip

或者:

adb shell bugreport > bugreport.txt

如果是 Android 7.0 以上,会生成 bugreport.zip,解压后包含:
bugreport.txt(完整日志)
FS(文件系统信息)
TOMBSTONES(崩溃信息)
ANR(应用无响应日志)

📌 2. main.log(主日志)
main.log 主要记录 系统组件 & 应用的运行状态,包含: ✅ 应用启动 / 退出
✅ Service 启动 / 绑定 / 解绑
✅ Activity 生命周期(onCreate、onResume、onDestroy)
✅ 重要的系统信息 & 错误日志
🔍 关键搜索词:

am_proc_start  # 进程启动
am_proc_died   # 进程结束
am_activity_launch_time  # Activity 启动耗时
am_crash   # APP 崩溃
am_anr   # APP ANR

🔍 示例:

02-05 12:45:21.123  1000  1850  1982 I am_proc_start: [0,18982,10034,com.android.settings,activity]

📌 解析: com.android.settings 进程(PID=18982)启动成功。

📌 3. event.log(系统事件日志)
event.log 主要记录 系统关键事件,例如: ✅ 应用前后台切换
✅ 屏幕解锁 / 休眠
✅ WMS(窗口管理)事件
🔍 关键搜索词:

wm_task_moved  # Activity 切换
screen_toggled  # 屏幕开关

🔍 示例:

02-05 13:05:33.123  1000  1850  1982 I screen_toggled: 1

📌 解析: screen_toggled: 1 表示 屏幕被点亮,0 表示 息屏。

📌 4. ANR(Application Not Responding)
ANR(应用无响应) 发生在: ✅ 主线程阻塞(耗时任务没放到子线程)
✅ 输入事件(InputDispatch)超时
✅ Service 绑定 / 解绑超时
🔍 关键搜索词:

am_anr  # 查找所有 ANR 事件

🔍 示例:

02-05 14:12:45.987  1000  1850  1982 I am_anr: [12345,com.example.app,InputDispatching Timeout]

📌 解析:
12345 = 进程 ID
com.example.app = 发生 ANR 的应用
InputDispatching Timeout = 由于 主线程卡住 导致 ANR
🛠 如何分析 ANR ? 1️⃣ 搜索 “ANR in” 找到完整 ANR 堆栈日志
2️⃣ 查看 “main.log” 是否有 “InputDispatch Timeout”
3️⃣ 检查 “event.log” 看看屏幕操作记录

📌 5. Crash(应用崩溃)
Crash(崩溃) 主要由于: ✅ 空指针异常(NullPointerException)
✅ 数组越界(ArrayIndexOutOfBoundsException)
✅ ANR 之后的强制杀进程
🔍 关键搜索词:

am_crash   # APP 崩溃
FATAL EXCEPTION  # 关键错误

🔍 示例:

02-05 14:39:55.321  1000  1850  1982 I am_crash: [12345,1000,com.example.app,java.lang.NullPointerException,"Attempt to invoke virtual method 'java.lang.String'"]

📌 解析:
12345 = 进程 ID
com.example.app = 崩溃的应用
NullPointerException = 空指针异常

📌 6. 如何快速定位问题?
💡 快速分析思路: 1️⃣ 应用崩溃(Crash)
搜 am_crash 找到崩溃日志
查看 FATAL EXCEPTION 详细堆栈
2️⃣ 应用卡死(ANR)
搜 am_anr 找到 ANR 发生时间
搜 InputDispatching Timeout 确认是否是主线程卡住
3️⃣ 应用启动慢
搜 am_proc_start 找到进程启动时间
搜 am_activity_launch_time 查看 Activity 启动耗时
4️⃣ 系统 BUG / 设备异常
搜 system_server crash 找到 SystemServer 崩溃
搜 tombstone 查找 native 崩溃(C++ 代码问题)

💡 总结
通过 bugreport,我们可以快速分析 应用崩溃(Crash)、ANR(无响应)、系统事件(event.log),快速定位 Android 系统的问题。希望这篇文章能帮到你!💪🚀
📢 你在调试 bugreport 过程中遇到哪些问题?欢迎留言讨论! 😃


http://www.ppmy.cn/embedded/161894.html

相关文章

Java进阶:Dubbo

分布式RPC框架Apache Dubbo 1. 软件架构的演进过程 软件架构的发展经历了由单体架构、垂直架构、SOA架构到微服务架构的演进过程,下面我们分别了解一下这几个架构。 1.1 单体架构 架构说明: 全部功能集中在一个项目内(All in one&#xf…

问题:通过策略模式+工厂模式+模板方法模式实现ifelse优化

项目场景: 提示:这里简述项目相关背景: 示例:商城系统有会员系统,不同会员有不同优惠程度,普通会员不优惠;黄金会员打8折;白金会员优惠50元,再打7折; 问题描…

MT6835 21位 磁编码器 SPI 平台无关通用驱动框架 STM32

MT6835 21位 磁编码器 SPI 平台无关通用驱动框架 STM32 1. 获取代码:2. 加入你的项目2.1 以 STM32 为例:2.2 以 ESP-IDF 为例: 3. 对接 API3.1 以 STM32 为例: 4. 更多函数说明5. 写入 EEPROM 示例 MT6835 Framework 纯C语言实现,跨平台&…

【2024最新Java面试宝典】—— SpringBoot面试题(44道含答案)_java spingboot 面试题

37. 如何重新加载 Spring Boot 上的更改,而无需重新启动服务器?Spring Boot项目如何热部署?38. SpringBoot微服务中如何实现 session 共享 ?39. 您使用了哪些 starter maven 依赖项?40. Spring Boot 中的 starter 到底是什么 ?4…

手动配置IP

手动配置IP,需要考虑四个配置项: 四个配置项 IP地址、子网掩码、默认网关、DNS服务器 IP地址:格式表现为点分十进制,如192.168.254.1 子网掩码:用于区分网络位和主机位 【子网掩码的二进制表达式一定是连续的&#…

深入剖析 Apache Shiro550 反序列化漏洞及复现

目录 前言 一、认识 Apache Shiro 二、反序列化漏洞:隐藏在数据转换中的风险 三、Shiro550 漏洞:会话管理中的致命缺陷 四、漏洞危害:如多米诺骨牌般的连锁反应 五、漏洞复现:揭开攻击的神秘面纱 (一&#xff0…

Linux内核实时机制x - 中断响应测试 Cyclictest分析1

Linux内核实时机制x - 中断响应测试Cyclitest 1 实时性测试工具 rt-test 1.1 源码下载 1.下载源码: ~/0-code/5.15$ git clone git://git.kernel.org/pub/scm/utils/rt-tests/rt-tests.git 正克隆到 rt-tests... remote: Enumerating objects: 5534, done. remot…

智能GUI Agent是什么,有什么应用领域

智能GUI Agent是什么 研究背景与目的:GUI长期主导人机交互,LLM特别是多模态模型的出现,为GUI自动化带来变革,催生了基于LLM的GUI智能体。这些智能体可理解自然语言指令,处理复杂GUI元素并执行操作,改变了用户与软件交互方式。论文旨在梳理该领域发展脉络,剖析关键要素,…