全部博文(478)
分类: Android平台
2015-06-23 10:47:05
二、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 usr和eng的区别
MTK 补充说明差异:
(1) Debug/LOG 方面,原则上user 版本只能抓到有限的资讯,eng 可以抓到更多的资讯,Debug 能力更强,推崇使用eng 版本开发测试
* 因user/eng 版本设置ro.secure不同,导致user 版本adb 只拥有shell 权限,而eng 版本具有root 权限
* MTK System LOG 在ICS 以后,在user 版本默认关闭全部LOG,在eng 版本中默认打开,以便抓到完整的资讯
* 在eng 版本上,LOG 量 >= user 版本的log 量,一些地方会直接check eng/user 版本来确认是否打印LOG
* user 版本默认关闭uart, eng 版本默认开启uart
* 在eng 版本上,开启ANR 的predump, 会抓取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 返回值如果是user 即user 版本,eng 即eng 版本
* Log 确认, mobilelog/Aplog_xxxxx/versions 中查看ro.build.type 属性