DEBUG之抓取蓝牙分析log
前言:
DEBUG的故事相信大家都不陌生,简单来说就是在早期计算机体积比较庞大的时期,一只虫子飞到计算机的线路里,造成了计算机短路,然后工作人员排查原因时,发现原来是这只虫子造成的。后来,就把解决计算机系统缺陷、漏洞叫做DEBUG.
当前,DEBUG和BUG这两个词经常被用在计算机软件行业。
我想,做过DEBUG的都知道,log是在DEBUG过程中被提及最多的一个东西。那什么是log呢?log中文名叫日志,它能反应出程序在计算机或其他系统中当前的状态、位置、时间等参数。通俗来说就是log是报告当前程序运行到哪了,它是什么状态的输出语句,它可以告诉程序员当前程序是正常运行还是出错了,在什么地方出错的,通过log文件来检查程序运行情况以及快速排查错误。其实,log也是程序的一部分,它是需要程序员在程序中的一些位置加入输出语句,才能形成详细的log文件。
这篇文章主要讲一下android系统下的log获取。
log的分类:
Android系统中不同模块log类型如下图所示:

内核空间log抓取方法:
Android系统有用户空间和内核空间,获取不同空间下log的方法也是不一样的。内核空间是系统的底层,占用系统的内存相较于用户空间要少,代码量也少,它的log输出内容有电池、内存等系统物理资源状态以及驱动的运行情况。获取内核log方法如下:
方法一:
1.adb shell;
2.cd mnt/sdcard;
3.dmesg > kernellog.txt <文件存放路径>
;注意:此方式不要在安卓的根目录下执行
方法二:
1.adb shell dmesg > kernellog.txt <文件存放路径>;
若有:…:Read-only file system的错误,只是因为你所在的system文件夹是只读文件夹,需要改变文件夹的属性,有两种方式:一、mount -o remount -o rw /system;二、root,disable-verity,reboot,root,remount.注意这两种方式都要是userdebug版本的安卓。
以上是常用的方法。内核空间还有一种动态log调试的方法,这个就下次再讲了,本文主要讲解log的概述。
用户空间log抓取方法:
在内核空间以上,也就是hal层、framework层、应用层都可以用logcat来抓取log。抓取方法如下:
方法一:进程阻塞终端一直抓
adb shell logcat > Logcat.txt
方法二:在android内开后台进程抓
1.logcat -v threadtime > Logcat.txt &;
-v是控制log的输出格式,threadtime是日志输出时间和线程信息。更多logcat 参数用法用:logcat –hlep查看。
2.Kill 进程号
这里的进程号是在执行第一步之后,系统给出的,这步的作用就是结束后台抓log的进程。
蓝牙snoop log抓取方法:
Android中做蓝牙BUG分析抓取log的方法为:
step 0:adb pull system/etc/bluetooth/bt_stack.conf,把bt_stack.conf文件pull出来,用编辑器将文件中的log等级都改成6。然后再adb push system/etc/bluetooth/bt_stack.conf
step 1: adb shell setprop persist.bluetooth.btsnoopenable true 或者手机进入开发者模式,打开开发者选项中Enable Bluetooth HCI snoop log,这两者的作用是相同的,就是抓取snoop log。
step 2:重启蓝牙一次。
step 3:adb shell;cd mnt/sdcard; logcat -v threadtime > Logcat.txt &
Step4:androi O 及以上版本btsnoop log 将保存在 /data/misc/bluetooth/logs/
将logcat、snooplog、.cfa log都拉出来进行分析,.cfa文件用蓝牙协议工具(comproble protocol analysis system)打开。
这里一共抓取了两种log:logcat log 和btsnoop log。蓝牙的大部分问题都能用这两种log结合代码分析出来。其实蓝牙还有一种log叫OTA log,这种log要专业的设备才能抓取,它显示的是蓝牙从baseband到最上层的profile整个协议栈两个蓝牙设备之间的交互命令和数据。
结语:
以上讲的都是DEBUG的第一步,获取log原材料,接着就是分析log,在这一步中你就需要些经验了,这一步别人很难帮到你。搜索log中的关键字,找你怀疑的地方,继续在代码中添加你自己的log,再抓取一遍log,不断排查原因,找到解决方案,DEBUG就算完成了。