Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1305917
  • 博文数量: 478
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 4833
  • 用 户 组: 普通用户
  • 注册时间: 2014-06-28 11:12
文章分类

全部博文(478)

文章存档

2019年(1)

2018年(27)

2017年(21)

2016年(171)

2015年(258)

我的朋友

分类: Android平台

2015-06-23 10:47:05

http://blog.csdn.net/yaoming168/article/details/38777727
一、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 版本默认关闭全部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 属性

 

阅读(1428) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~