ADB 调试与日志分析
1. 概述
1.1 功能简介
本文档介绍 M4-R2(RK3576)Android 14 系统的 ADB 调试与日志分析方法,涵盖 ADB 连接方式、logcat 日志过滤、procrank 内存分析、dumpsys 服务信息、pstore 内核日志、FIQ 调试模式等内容,帮助开发者高效排查系统与应用问题。
1.2 应用场景
- 抓取应用/系统崩溃日志
- 分析内存占用与泄漏
- 查询系统服务状态
- 内核崩溃(panic)后的日志分析
- 嵌入式环境下的调试(无显示器)
1.3 前置条件
- 开发板已烧录 Android 14 系统并正常启动
- 已开启 USB 调试(详见 Android系统基础操作)
- 电脑已安装 adb 工具
2. ADB 连接
2.1 USB 连接
adb devices
# 输出:设备序列号 device2.2 网络连接
# 开发板连接网络后查询 IP
adb shell ip addr show eth0
# adb 网络连接
adb connect 192.168.1.100:55552.3 root 与 remount
adb root # userdebug 版本获取 root
adb remount # 重新挂载 system/vendor 为可写3. logcat 日志分析
3.1 日志级别
logcat 日志级别从低到高:
| 级别 | 含义 |
|---|---|
| V | Verbose(最详细) |
| D | Debug |
| I | Info |
| W | Warning |
| E | Error |
| F | Fatal |
| S | Silent(静默) |
3.2 常用过滤命令
# 查看所有日志
adb logcat
# 只显示 Error 及以上
adb logcat *:E
# 按标签过滤
adb logcat -s TagName
adb logcat TagName:I *:S
# 按进程过滤
adb logcat --pid=$(adb shell pidof com.example.app)
# 时间过滤
adb logcat -T "10-23 10:00:00.000"3.3 抓取完整日志
# 清空缓冲区后重新抓取
adb logcat -c
adb logcat > crash.log
# 带时间戳保存
adb logcat -v time > full.log4. 内存分析
4.1 procrank 命令
参考说明:procrank 显示各进程内存占用,以 PSS(按比例分摊)衡量内存。
# 查看内存排行
adb shell procrank
# 按 RSS 排序
adb shell procrank -r
# 只显示前几项
adb shell procrank | head -20关键指标:
| 指标 | 含义 |
|---|---|
| VSS | 虚拟内存大小(含未映射) |
| RSS | 常驻内存大小(不共享分摊) |
| PSS | 按比例分摊的物理内存(推荐) |
| USS | 独占物理内存 |
4.2 其他内存命令
# 查看内存概况
adb shell free -h
adb shell cat /proc/meminfo
# 查看应用内存
adb shell dumpsys meminfo com.example.app
# 查看内存压力
adb shell cat /proc/pressure/memory5. 系统服务查询
5.1 dumpsys 命令
# 查看所有服务列表
adb shell dumpsys -l
# 查看电池状态
adb shell dumpsys battery
# 查看显示信息
adb shell dumpsys display
# 查看 Activity 栈
adb shell dumpsys activity
# 查看窗口信息
adb shell dumpsys window5.2 查看 CPU/进程
# 查看进程列表
adb shell ps -A
# 查看 CPU 占用
adb shell top
# 查看进程详细状态
adb shell cat /proc/<pid>/status6. 内核日志与 pstore
6.1 dmesg 内核日志
# 查看内核日志
adb shell dmesg
# 按关键字过滤
adb shell dmesg | grep -i "npu\|drm\|i2c"6.2 pstore 崩溃日志
参考说明:内核 panic 时,崩溃日志保存在 pstore(ramoops)中,重启后可通过
/sys/fs/pstore/读取。
# 查看 pstore 目录
adb shell ls /sys/fs/pstore/
# 读取崩溃日志
adb shell cat /sys/fs/pstore/console-ramoops*
adb shell cat /sys/fs/pstore/dmesg-ramoops*注意:pstore 设备树节点(ramoops)配置以实际 SDK 为准。
6.3 关闭自动重启(开发调试)
# 内核 panic 时不自动重启(便于抓取日志)
adb shell setprop persist.sys.panic.reboot 07. FIQ 调试模式
参考说明:FIQ Debugger 是 Rockchip Linux 内核提供的底层调试模式,通过串口进入(可能需在内核配置中使能,以实际 SDK 为准)。
进入方式: 系统卡死时,按 Ctrl+C(或板卡定义的热键)进入调试终端:
| 命令 | 说明 |
|---|---|
pc | 打印当前 CPU 寄存器 |
regs | 打印所有寄存器 |
bt | 打印当前任务栈回溯 |
reboot | 重启系统 |
kmsg | 查看内核日志 |
console | 切换控制台 |
cpu | 切换调试 CPU |
ps | 查看进程列表 |
sysrq | 发送 SysRq 命令 |
8. 常见问题
8.1 adb 报 "device unauthorized"
现象: adb devices 显示 unauthorized。
解决方案:
- 在开发板弹窗中点击 "允许 USB 调试"
- 重新插拔 USB 线
- 执行
adb kill-server && adb start-server
8.2 logcat 无输出
解决方案:
- 确认 adb 已连接(
adb devices) - 清空缓冲区后再抓取:
adb logcat -c - 确认 log 级别过滤正确(
*:V)
8.3 系统卡死无法 adb
解决方案:
- 通过调试串口连接(波特率 1500000)
- 尝试 FIQ 调试模式
- 抓取 pstore 日志定位死机原因
- 重启后使用
adb logcat -b all抓取所有缓冲区
9. 相关文档
- Android系统基础操作 — 系统操作与 adb 基础
- Android系统定制 — 系统属性配置
- 调试工具使用指南 — Linux 调试工具
- 常见系统启动问题 — 启动问题排查
