Android6.0 Log 的抓取与分析

一、Android log框架简介

二、log获取方式

1、Eclipse 抓取

1)根据信息类型过滤log

那个显示框上面还有个下拉列表选项可以选择过滤哪些信息。
a、Log.v 的调试颜色为黑色的,任何消息都会输出,这里的v代表verbose啰嗦的意思,代码实现就是Log.v("","");
b、Log.d的输出颜色是蓝色的,仅输出debug调试的意思,但他会输出上层的信息,过滤起来可以通过DDMS的Logcat标签来选择
c、Log.i的输出为绿色,一般提示性的消息information,它不会输出Log.v和Log.d的信息,但会显示i、w和e的信息
d、Log.w的意思为橙色,可以看作为warning警告,一般需要我们注意优化Android代码,同时选择它后还会输出Log.e的信息。
e、Log.e为红色,可以想到error错误,这里仅显示红色的错误信息,这些错误就需要我们认真的分析,查看栈的信息了。

  log的过滤

2)自定义标签,过滤log

点击  添加Filter Name 和 by log Tag 来过滤代码中的Log.v("yaoming","ringTone[0]== "); log信息

  

2、adb 抓取log

ADB 是一个C/S 架构的应用程序,有三部分组成:

1)adbclient,运行在PC上(DDMS)

2)adbdaemon(守护进程),运行在Emulator中

3)adbserver(服务进程),运行在PC(任务管理器上可以看见),

管理着adb client和 adb daemon通讯

注:server与client通讯端口5037, adb server会与emulator交互,使用的端口有两个,一个是5554专用与emulator实例的连接,那么数据可以从emulator转发给IDE控制台,另一个则是5555,专门与adb daemon连接为后面调试使用

1、adbdevices 查看是否连接成功

2、adbinstall 

3、adbuninstall (卸载的软件时,卸载的是包名,后面跟的是包的名字,而不是.APK)

4、Logcat

 

 

 

 

 

 

1)、adb logcat>main.txt 重定向log、

2)、adb logcat -b main-v time>app.log 打印应用程序的log

3)、adb logcat -bradio -v time> radio.log 打印射频相关的log,SIM STK也会在里面,modem相关的ATcommand等,

4)、adb logcat -bevents -v time  打印系统事件的日志,比如触屏事件。。。

5)、tcpdump 是很有用的,对于TCP/IP协议相关的都可以使用这个来抓,adb shell tcpdump-s 10000 -w /sdcard/capture.pcap,比如抓mms下载的时候的UA profile,browser上网的时候,使用proxy的APN下载,streaming的相关内容包括UA profile等。

 

3、Mtklog 

1, radio log

线:usb cable

命令: adb logcat –b radio –v time >radio.txt

-v time: 表示log中加入了时间信息

2, main log

main log和我们从DDMS中看到的log是一致的

线: usb cable

命令: adb logcat –b main –v time >main.txt

-v time: 表示log中加入了时间信息

3, event log

event log属于system log

线: usb cable

命令: adb logcat –b events –v time >events.log

-v time: 表示log中加入了时间信息

4, kernal log

使用超级终端来抓kernal log,请参考以下步骤:

 四、log分析

1、Java Exception

       在main log中分析,要注意Exception的时间、PID和栈

2、Native  code/jni 导致

1)、error.h  这个文件 中标明含义

2)、sqlite 错误 sqlite3.h中查找 标明含义

3)、NO space left ondevice 磁盘空间已满

使用du命令 查看文件空间

find -type size +100k 大于100k文件

4)、ooM 异常

3、ANR

在log中查看 system log找到ANR关键字

 

 

MTK log分析

1、Mobile Log:也称AP log,系统应用层的log,比如应用程序无响应或强行关闭,kernel相关的,比如driver(相机、蓝牙、usb、启动)出了开机问题、手机对服务唤醒和休眠的一些记录蓝牙相关问题。

2、主要包括四种log:kernel、main、event  and radio log

3、Modem log 是手机里负责搜网和sim卡数据操作底层模块,

md log用于分析掉网、掉话和无信号问题,一般此文件都需要特殊工具解码,主要针对射频modem相关问题抓取(mtklog/mdlog)

4、Network log

主要针对网络的Network相关问题抓取(mtklog/netlog)

主要场景:彩信下载、浏览器上网、streaming问题相关

WIFI、数据流量下不同场景信号下的网络连接问题,网络下的数据传输问题

五、抓取log注意事项

 

1、抓取log时最好标注一下问题发生的时间

2、

 

 

 

 

 

 

 

MTK usreng的区别

MTK 补充说明差异:
(1) Debug/LOG
方面,原则上user版本只能抓到有限的资讯,eng可以抓到更多的资讯,Debug能力更强,推崇使用eng版本开发测试
*      
user/eng版本设置ro.secure不同,导致user版本adb只拥有shell 权限,而eng版本具有root权限
*       MTK System LOG
ICS以后,在user版本默认关闭全部LOGeng版本中默认打开,以便抓到完整的资讯
*      
eng版本上,LOG >= user 版本的log量,一些地方会直接check eng/user版本来确认是否打印LOG
*       user
版本默认关闭uart, eng版本默认开启uart
*      
eng版本上,开启ANRpredump, 会抓取ftrace,可以得到更多ANR的资讯
*      
eng版本上,可用rtt抓取backtrace,可开启kdb进行kernel debug,可用ftrace抓取cpu 执行场景
*       MTK aee
ENG版本抓取更多的异常资讯,比如native exception会抓取core dump信息

 

(2) 性能方面,原则上进行性能测试请使用user版本测试
*       user
版本为提高第一次开机速度,使用了DVM的预优化,将dex文件分解成可直接load运行的odex 文件,ENG版本不会开启这项优化
*      
更少的LOG打印,uart的关闭,原则上user版本的性能要优于eng版本

 

(3) 如何确认user/eng版本
*       Java
层,checkandroid.os.Build类中的TYPE
*       native
层,property_get("ro.build.type",char* value, "eng");然后check value
*       Debug
时, adb shellgetprop ro.build.type返回值如果是useruser 版本,engeng版本
*       Log
确认,  mobilelog/Aplog_xxxxx/versions中查看ro.build.type属性

 

你可能感兴趣的:(编程工具使用技巧)