第二章:日志抓取方法——Android端抓取方法

各位好,我是老张。今天咱们聊聊Android端怎么抓日志。说实话,这活儿看着简单,但坑不少。我见过太多工程师拿着半截日志来问我,结果一看,关键信息全没抓到。

Android端抓日志,主要有三条路:adb logcat、bugreport,还有芯片厂商自己的工具。咱们一条一条说。

2.1 adb logcat:最基础的抓取方式

adb logcat是Android调试桥的标准日志输出。说白了,就是把系统里所有进程的日志都吐出来。但这里有个问题——信息太多,反而找不到重点。

我个人习惯,先清空缓存再抓:

adb logcat -c
adb logcat -v threadtime > wifi_log.txt

为什么要加-v threadtime?因为默认格式不带时间戳和线程ID。你想想看,排查WiFi断连问题时,没有时间戳,你怎么知道哪个事件先发生?

过滤技巧

  • 只看WiFi相关:adb logcat -s "wpa_supplicant" "WifiStateMachine"
  • 蓝牙相关:adb logcat -s "BluetoothAdapter" "BtGatt"
  • 同时看多个tag:用空格隔开就行
我的小技巧: 抓WiFi问题时,我习惯同时抓wpa_supplicantWifiStateMachine两个tag。前者管底层连接,后者管上层状态机。两者对照着看,问题定位快得多。

2.2 bugreport:系统级快照

bugreport比logcat更全面。它不光抓日志,还把系统配置、进程状态、网络信息都打包了。我把它比作「系统体检报告」。

抓取命令很简单:

adb bugreport bugreport.zip

解压后你会看到一堆文件。重点关注这几个:

  • main_log:应用层日志,WiFi/蓝牙的框架层问题看这里
  • system_log:系统服务日志,权限、驱动问题看这里
  • dumpstate:系统状态快照,包括WiFi扫描结果、连接状态
注意: bugreport文件很大,动辄几十MB。我曾经在客户现场抓了一次,等了快5分钟才完成。所以建议在问题复现前就开始抓,别等出问题了再跑命令。

2.3 芯片厂商工具:CYW工具与QCA工具

这里我要多说两句。Android原生日志有时候不够细,比如WiFi底层的固件日志、蓝牙的HCI日志,logcat根本看不到。这时候就得用芯片厂商的工具。

CYW工具(博通/赛普拉斯方案)

CYW工具主要抓WiFi芯片的固件日志。我记得有一次排查WiFi频繁断连,logcat里只看到"Disconnected"事件,但原因不明。用CYW工具一抓,发现是固件里报了一个"Beacon loss"错误——原来是AP端信号不稳定。

使用方法:

# 开启固件日志
adb shell "echo 1 > /sys/kernel/debug/cyw_wl/dongle_dump"
# 抓取日志
adb logcat -s "CYW" > cyw_log.txt

QCA工具(高通方案)

高通方案的工具叫diag_mdlog,抓的是更底层的WiFi/蓝牙日志。说实话,这工具我第一次用的时候也懵——输出全是十六进制数据,看不懂。

后来发现,需要配合高通自己的解析工具(QXDM)才能看懂。但有个取巧的办法:

# 开启QCA日志
adb shell "echo 1 > /sys/kernel/debug/ipanic/debug_level"
# 抓取内核日志
adb shell dmesg > qca_kernel_log.txt

经验之谈: 如果你不确定设备用的是CYW还是QCA方案,可以查/proc/net/wireless文件。里面会显示驱动名称。我见过不少工程师拿错工具,白忙活半天。

2.4 Sniffer抓包:无线空口分析

Sniffer抓包,说白了就是监听空中的无线信号。这招最狠,因为你能看到AP和手机之间到底在传什么。

硬件上,我推荐用Wireshark配合支持监听模式的网卡。软件上,Windows用Wireshark,macOS用tcpdump。

抓包要点:

  • 信道要对:手机连的是哪个信道,Sniffer就得设成哪个信道
  • 过滤条件:只抓目标设备的MAC地址,不然数据量太大
  • 时间同步:抓包前先同步手机和电脑的时间,方便对照
# macOS下抓包示例
sudo tcpdump -i en0 -e -s 0 -w wifi_capture.pcap
# 过滤特定MAC地址
sudo tcpdump -i en0 -e -s 0 -w wifi_capture.pcap ether host AA:BB:CC:DD:EE:FF
避坑指南: 我曾经在抓包时忘了设信道,结果抓了一堆无关数据。后来学乖了——先用WiFi Analyzer扫一下周围信道,确认目标设备在哪个信道,再开始抓。

2.5 实战建议:怎么选工具?

场景 推荐工具 原因
WiFi连接失败 logcat + bugreport 看上层状态机,快速定位
WiFi频繁断连 CYW/QCA工具 + Sniffer 看底层固件和空口信号
蓝牙配对异常 logcat + bugreport 看HCI日志和协议栈状态
蓝牙音频卡顿 Sniffer + 厂商工具 看空口丢包和重传

嗯,总结一下。Android端抓日志,核心就四个字:对症下药。别一上来就开Sniffer,也别只盯着logcat。根据问题现象,选对工具,才能事半功倍。

下一章,咱们聊聊iOS端的抓取方法。说实话,iOS比Android封闭得多,但也不是没办法。到时候我分享几个实战中摸索出来的偏方。