Android 7系统异常问题排查(九)日志系统—logcat与bugreport
系列目录第一篇异常机制全景图 | 第二篇Kernel Panic 与系统重启 | 第三篇Tombstone 机制 | 第四篇System Server Watchdog | 第五篇System Server 崩溃 | 第六篇ANR 机制 | 第七篇Java 层崩溃 | 第八篇Trace 机制 | 第九篇日志系统 | 第十篇实战方法论一、日志系统异常定位的数据源你可能遇到过这些场景异常发生后 logcat 缓冲区已被覆盖找不到关键日志不知道tombstone、dropbox、traces.txt分别存在哪里bugreport 文件巨大10-50MB不知道从哪个 Section 开始看重启后内核日志丢失无法分析 Kernel Panic前 8 篇文章介绍了各种异常机制它们产生的日志最终都汇集到 Android 的日志系统中。理解日志系统的架构才能做到异常发生后知道去哪里找什么日志。Android 日志体系总览┌───────────────────────────────────────────────┐ │ 日志生产者 │ │ ├─ 内核 (printk) → dmesg / pstore │ │ ├─ Native 进程 (ALOGx 宏) │ │ ├─ Java 进程 (Log.x / Slog.x) │ │ └─ debuggerd (tombstone) │ ├───────────────────────────────────────────────┤ │ 日志传输与缓冲 │ │ ├─ logd daemon (用户态日志守护进程) │ │ ├─ /dev/socket/logd (socket 通信) │ │ └─ 四种缓冲区 (main/system/crash/kernel) │ ├───────────────────────────────────────────────┤ │ 日志持久化 │ │ ├─ DropBoxManagerService (/data/system/dropbox/) │ │ ├─ tombstone (/data/tombstones/) │ │ ├─ ANR traces (/data/anr/) │ │ └─ pstore (内核 panic 日志) │ ├───────────────────────────────────────────────┤ │ 日志消费工具 │ │ ├─ logcat 命令行 │ │ ├─ dumpsys dropbox │ │ ├─ bugreport / bugreportz │ │ └─ bugreport 可视化工具ChkBugReport 等 │ └───────────────────────────────────────────────┘二、logd 守护进程2.1 logd 是什么logd是 Android 的用户态日志守护进程源码位于system/core/logd/。在 AOSP 7 中所有Log.x()调用最终都通过logd写入日志缓冲区。App/System 进程 │ ├─ Log.i(TAG, message) ├─ Slog.i(TAG, message) ← System Server 使用 └─ ALOGI(message) ← Native 进程使用 │ ▼ liblog.so (log write 接口) │ ▼ /dev/socket/logd (Unix Domain Socket) │ ▼ logd daemon ├─ LogBuffer (环形缓冲区内存中) │ ├─ main (默认 256KB) │ ├─ system (默认 256KB) │ ├─ crash (默认 256KB) │ └─ kernel (默认 256KB) │ ├─ LogReader (响应 logcat 读取请求) └─ CommandListener (响应 clear 等命令)2.2 四种日志缓冲区缓冲区用途典型 TAG读取方式mainApp 日志默认Log.i()写入自定义 TAGlogcat -b mainsystem系统服务日志Slog.i()写入ActivityManager、WindowManagerlogcat -b systemcrash崩溃相关日志AndroidRuntime等logcat -b crashkernel内核日志kernellogcat -b kernel或dmesg2.3 logcat 命令详解# 基础用法adb logcat# 默认读取 main system 缓冲区adb logcat-ball# 读取所有缓冲区adb logcat-bmain-bsystem# 读取指定缓冲区# 过滤adb logcat-sActivityManager# 只显示指定 TAGadb logcat *:W# 只显示 Warning 及以上级别adb logcat ActivityManager:I *:S# AMS 的 Info 以上其他静默# 格式控制adb logcat-vtime# 显示时间戳adb logcat-vthreadtime# 显示时间 线程信息adb logcat-vbrief# 简洁格式adb logcat-vlong# 详细格式含 PID/TID/TAG/Priority# 输出控制adb logcat-d# dump 当前缓冲区后退出adb logcat-c# 清空缓冲区adb logcat-f/sdcard/log.txt# 输出到文件adb logcat-r1024-n5# 自动切割每文件1MB保留5个# 过滤指定进程adb logcat--pid1234# 只看指定 PID2.4 日志级别级别缩写含义使用场景VerboseV详细信息开发和调试用不用于生产DebugD调试信息调试阶段的临时日志InfoI一般信息正常流程的标记WarningW警告异常但可恢复的情况ErrorE错误功能异常需要关注FatalF致命错误系统级别的严重问题Log.v(TAG,verbose);// VERBOSELog.d(TAG,debug);// DEBUGLog.i(TAG,info);// INFOLog.w(TAG,warning);// WARNLog.e(TAG,error);// ERRORLog.wtf(TAG,what a terrible failure);// ASSERT (FATAL)三、内核日志3.1 dmesg# 查看当前内核日志环形缓冲区adb shelldmesg# 持续监控内核日志adb shellcat/proc/kmsg# 清空内核日志adb shelldmesg-c3.2 last_kmsg重启前最后的内核日志# 查看上次重启前的内核日志adb shellcat/proc/last_kmsg# 高通平台从 pstore 读取adb shellcat/sys/fs/pstore/console-ramoops3.3 dmesg vs logcat -b kernel 的区别特性dmesglogcat -b kernel直接来源内核printk环形缓冲区logd 的 kernel buffer是否持久化重启消失重启消失读取方式直接读/dev/kmsg通过 logd socket包含内容所有printk输出logd 初始时从/proc/kmsg读取的快照四、DropBoxManagerService4.1 什么是 DropBoxDropBoxManagerService是 Android 的异常日志收件箱负责将各类系统异常crash、ANR、watchdog、tombstone 等持久化存储到磁盘。源码路径frameworks/base/services/core/java/com/android/server/DropBoxManagerService.javapublicclassDropBoxManagerServiceextendsIDropBoxManagerService.Stub{// ...// 存储路径/data/system/dropbox/// 每个条目是一个文件文件名格式tagtimestamp.txt// ...}关键设计DropBox 条目以文件形式持久化存储每个条目有独立的 tag 和时间戳不会因 logcat 缓冲区溢出而丢失。4.2 DropBox 条目类型速查adb shell dumpsys dropboxTag对应异常包含内容SYSTEM_BOOT系统启动启动时间、上次重启原因system_server_crashSystem Server 崩溃Java 异常堆栈、进程信息system_server_watchdogSystem Server Watchdog各线程堆栈、锁信息SYSTEM_TOMBSTONE系统进程 Native 崩溃完整 tombstone 文本data_app_crashApp 崩溃异常类型、消息、堆栈data_app_anrApp ANRCPU 使用率、线程堆栈system_app_crash系统 App 崩溃同上系统 App 用system_app_anr系统 App ANR同上系统 App 用BATTERY_DISCHARGE_INFO电池放电信息低电量关机时记录4.3 查看 DropBox 内容# 列出所有条目adb shell dumpsys dropbox# 查看指定条目内容adb shell dumpsys dropbox data_app_crash--print# 查看最近的条目adb shell dumpsys dropbox|head-100# 导出所有 dropbox 文件adb pull /data/system/dropbox/ dropbox_dump/五、bugreport5.1 bugreport 是什么bugreport是 Android 最全面的诊断信息收集命令一键收集系统运行的所有状态信息。它相当于同时执行了以下所有操作logcat-ball-d# 所有日志缓冲区dmesg# 内核日志dumpsys# 所有系统服务的当前状态/data/anr/traces.txt# ANR 线程堆栈/data/tombstones/# Native 崩溃墓碑/proc/last_kmsg# 上次重启的内核日志/proc/meminfo# 内存使用情况/proc/cpuinfo# CPU 信息...(还有很多)5.2 生成 bugreport# 方法1传统方式文本格式较大adb bugreportbugreport.txt# 方法2压缩格式推荐adb bugreportz# 输出bugreport-NRD90M-2024-01-01-12-00-00.zip# 方法3从设备上直接生成adb shell bugreportz adb pull /data/user_de/0/com.android.shell/files/bugreports/bugreport-*.zip5.3 bugreport 核心 Section 解读bugreport 是一个巨大的文本文件通常 10-50MB以下是异常定位最需要关注的 SectionDUMP OF SERVICE activity当前 Activity 状态ACTIVITY MANAGER ACTIVITIES (dumpsys activity activities) Stack #0: Task id #1 TaskRecord{xxx #1 Acom.example.app U0 sz1} Hist #0: ActivityRecord{xxx u0 com.example.app/.MainActivity} state: RESUMEDDUMP OF SERVICE meminfo内存状态Total RAM: 2,876,928 kB (status normal) Free RAM: 1,234,567 kB Used RAM: 1,642,361 kB Lost RAM: 0 kB ZRAM: 123,456 kB physical used ...DUMP OF SERVICE dropbox最近异常显示最近的 DropBox 条目列表快速找到异常记录。KERNEL LOG (dmesg)4[ 1234.567890] [BATTERY] capacity80% voltage4000mV ... 3[ 1234.567900] eMMC: mmc0: timeout waiting for ...SYSTEM LOG (所有缓冲区)主日志缓冲区 系统日志缓冲区。EVENT LOG系统事件日志二进制格式解析后可读包含am_anrANR 事件am_crash崩溃事件am_proc_died进程死亡am_proc_start进程启动battery_level电量变化screen_toggled亮屏/灭屏5.4 bugreport 快速定位技巧# 搜索崩溃记录grep-nFATAL EXCEPTIONbugreport.txt# 搜索 ANRgrep-nANR inbugreport.txt# 搜索 Native 崩溃grep-nsignal 11\|signal 6\|signal 7bugreport.txt# 查找 System Server Watchdoggrep-nWATCHDOGbugreport.txt# 查看重启原因grep-nboot_reason\|rebootbugreport.txt# 查找低内存杀死grep-nLow Memory Killer\|kill.*adjbugreport.txt六、日志存储路径汇总路径内容持久化重启后/proc/kmsg内核日志实时否消失/proc/last_kmsg上次内核日志通过 pstore可读/sys/fs/pstore/pstore 持久化日志是保留/data/anr/traces.txtANR 线程堆栈是保留/data/tombstones/Native 崩溃墓碑是保留/data/system/dropbox/DropBox 异常日志是保留/dev/socket/logdlogd 缓冲区否内存消失七、日志抓取策略7.1 在线收集设备正常运行#!/bin/bash# 完整收集脚本TIMESTAMP$(date%Y%m%d_%H%M%S)DIRbugreport_${TIMESTAMP}mkdir-p$DIRecho1/6 收集 bugreport...adb bugreportz adb pull /data/user_de/0/com.android.shell/files/bugreports/bugreport-*.zip$DIR/echo2/6 收集 logcat...adb logcat-ball-d$DIR/logcat_all.txtecho3/6 收集 dmesg...adb shelldmesg$DIR/dmesg.txtecho4/6 收集 ANR traces...adb pull /data/anr/traces.txt$DIR/2/dev/nullecho5/6 收集 tombstone...adb shellls/data/tombstones/|whilereadf;doadb pull /data/tombstones/$f$DIR/doneecho6/6 收集 dropbox...adb shell dumpsys dropbox$DIR/dropbox.txtecho收集完成$DIR7.2 离线收集重启后优先级顺序 1. /sys/fs/pstore/console-ramoops → 内核 panic 现场 2. /proc/last_kmsg → 上次内核日志 3. /data/tombstones/tombstone_* → Native 崩溃记录 4. /data/system/dropbox/ → 异常记录 5. /data/anr/traces.txt → ANR 记录八、总结logd 是用户态日志的中心枢纽main/system/crash/kernel 四种缓冲区各有侧重。DropBox 是异常日志的持久化保险箱crash、ANR、watchdog、tombstone 都存储在此不因 logcat 缓冲区溢出而丢失。bugreport 是一键收集全系统状态的瑞士军刀集成了 logcat、dmesg、dumpsys 等所有诊断信息。日志存储有内存和磁盘两层logcat 缓冲区在内存重启消失DropBox/tombstone 在磁盘重启保留。掌握日志路径映射 掌握问题定位的第一步什么问题对应什么路径是高效排障的基础。下一篇系列终篇将用真实案例串联前 9 篇的所有知识形成完整的排障方法论。本文基于 AOSP 7Android Nougat源码编写。

相关新闻

UV Squares:3分钟掌握Blender UV规整化的终极指南

UV Squares:3分钟掌握Blender UV规整化的终极指南

UV Squares:3分钟掌握Blender UV规整化的终极指南 【免费下载链接】UvSquares Blender addon for reshaping UV quad selection into a grid. 项目地址: https://gitcode.com/gh_mirrors/uv/UvSquares 你是否曾在Blender的UV编辑器中面对杂乱的四边形UV面感到…

2026/9/17 7:40:44 阅读更多 →
事件驱动架构实战:从原理到性能优化,提升系统吞吐量与响应能力

事件驱动架构实战:从原理到性能优化,提升系统吞吐量与响应能力

1. 从“请求-响应”到“事件驱动”的思维跃迁 在传统的单体应用或同步微服务架构里,我们最熟悉的模式是“请求-响应”。用户点击一个按钮,前端发起一个HTTP请求,后端服务接收到请求后,开始执行一连串的数据库查询、业务逻辑计算、…

2026/9/16 5:19:29 阅读更多 →
银河麒麟V10桌面系统安装与配置全指南:从分区到驱动避坑

银河麒麟V10桌面系统安装与配置全指南:从分区到驱动避坑

1. 从“为什么”开始:理解银河麒麟V10的定位与价值 如果你最近在关注国产操作系统,或者因为工作、学习需要,必须在一台电脑上部署一个安全、可控的桌面环境,那么“银河麒麟V10”这个名字大概率已经进入了你的视野。它不是一个凭空…

2026/9/16 18:01:53 阅读更多 →

最新新闻

性能优化避坑:还有多久你的代码会崩?

性能优化避坑:还有多久你的代码会崩?

性能优化避坑:还有多久你的代码会崩? 别翻那几百页的官方文档了,太累且抓不住重点。 你刚接手一个高并发接口,CPU 飙升,响应延迟从 50ms 飙到 2s。 这时候问自己: 性能优化还有多久能搞定? 答案是,如果你还在用 for…

2026/9/22 4:42:03 阅读更多 →
断点伴奏调优实战:3个关键步骤让代码跑通提速80%

断点伴奏调优实战:3个关键步骤让代码跑通提速80%

断点伴奏调优实战:3个关键步骤让代码跑通提速80% 复制来的代码跑不通,报错信息看得头大,断点调试像盲打一样毫无头绪?别急,这不仅是新手困境,更是资深工程师在维护遗留系统时的日常痛点。真正的 最佳实践…

2026/9/22 4:42:03 阅读更多 →
GALAXYBASE图解原理:劳务班组负责人3天搞懂核心架构

GALAXYBASE图解原理:劳务班组负责人3天搞懂核心架构

GALAXYBASE图解原理:劳务班组负责人3天搞懂核心架构 官方文档动辄几十页,全是专业术语,读完脑子还是空的。别慌,今天把GALAXYBASE的底层逻辑拆碎了喂给你。…

2026/9/22 4:42:03 阅读更多 →
10年老兵分享:vagaa哇嘎官方网站速查手册,告别代码跑不通

10年老兵分享:vagaa哇嘎官方网站速查手册,告别代码跑不通

10年老兵分享:vagaa哇嘎官方网站速查手册,告别代码跑不通 复制来的代码跑不通不知道怎么调,这种绝望感谁懂?明明照着教程敲,运行起来全是红字报错,改了一下午还是没头绪。别急,这不是你的错,是那些“野路子”代码没给你留活路。今天这份vag…

2026/9/22 4:42:03 阅读更多 →
下箭头怎么打:从键盘到源码的避坑指南

下箭头怎么打:从键盘到源码的避坑指南

下箭头怎么打:从键盘到源码的避坑指南 学会语法却不知怎么搭项目?别急,这不仅是语法问题,更是工具链配置的深坑。很多开发者在代码里敲了半天 ↓ 或者 Unicode…

2026/9/22 4:41:03 阅读更多 →
w7系统之家实战:3个细节搞定源码解析,拒绝跑不通

w7系统之家实战:3个细节搞定源码解析,拒绝跑不通

w7系统之家实战:3个细节搞定源码解析,拒绝跑不通 复制来的代码跑不通,报错信息满屏飞,新手第一反应往往是“是不是我电脑配置不行?”或者“这段代码是不是有Bug?”。别急,这通常不是代码的问题,而是你对底层逻辑的理解存在断层。在…

2026/9/22 4:41:03 阅读更多 →

日新闻

3台商务办公笔记本实测:手写实现环境配置,告别卡半天

3台商务办公笔记本实测:手写实现环境配置,告别卡半天

3台商务办公笔记本实测:手写实现环境配置,告别卡半天 配置环境就卡半天?别怪机器慢,多半是你没选对工具链。在Java、Go或Python的项目现场, 手写实现…

2026/9/22 0:00:41 阅读更多 →
剑帝加点速查手册:3分钟搞懂核心逻辑

剑帝加点速查手册:3分钟搞懂核心逻辑

剑帝加点速查手册:3分钟搞懂核心逻辑 面试被问原理答不上来,是不是常态?别慌。很多开发者对着 GitHub 开源仓库里的代码发呆,看似简单实则暗藏玄机。今天这份【剑帝加点】速查手册,直接带你拆解核心实现,把面试必考的原理讲透。…

2026/9/22 0:00:41 阅读更多 →
手写实现图片压缩网站核心:搞定WebP转换与质量调优

手写实现图片压缩网站核心:搞定WebP转换与质量调优

手写实现图片压缩网站核心:搞定WebP转换与质量调优 复制来的代码跑不通不知道怎么调?别慌,这种“复制粘贴地狱”在开发圈太常见了。尤其是做 图片压缩网站…

2026/9/22 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/22 4:32:41 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/22 4:38:57 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/21 4:51:05 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/21 15:36:51 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/21 15:36:51 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/22 2:43:42 阅读更多 →