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/10/25 7:25:44 阅读更多 →
事件驱动架构实战:从原理到性能优化,提升系统吞吐量与响应能力

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

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

2026/10/27 20:22:52 阅读更多 →
银河麒麟V10桌面系统安装与配置全指南:从分区到驱动避坑

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

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

2026/10/25 8:25:38 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/1 0:24:43 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/1 10:36:53 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/1 10:36:51 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/1 1:06:58 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/1 10:35:11 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/1 9:35:41 阅读更多 →

日新闻

周新闻

月新闻