adb
命令抓取
error
级及以上
log
:
adb logcat –v time –s AndroidRuntime:E
或
adb logcat –v time AndroidRuntime:E *:S
Log
信息级别
Log.v - VERBOSE :
黑色
Log.d - DEBUG :
蓝色
Log.i- INFO :
绿色
Log.w- WARN :
橙色
Log.e- ERROR :
红色
优先级是下面的字符,顺序是从低到高:
V —
明细
verbose(
最低优先级
)
D —
调试
debug
I —
信息
info
W —
警告
warn
E —
错误
error
F —
严重错误
fatal
S —
无记载
silent
使用
logcat
命令查看
android
日志输出:
adb logcat //
显示全部日志
adb logcat > c:\test.log //
将日志保存到文件
test.log
log
过滤
-
l
og
过滤器使用(
adb logcat tag:priprity
)
过滤器表达式的格式是
tag:priority ...
,其中
tag
是标记(可以是具体的,
*
表示所有),
priority
是最小的优先级
,
可以是组合
adb logcat ActivityManager:I MyApp:D *:S
adb logcat * :W -----
所有优先级大于等于
“warning”
的日志
adb logcat * :E -----
所有优先级大于等于
“error”
的日志
仅输出标记为
“ActivityManager”
且优先级大于等于
“Info”
和标记为
“PowerManagerService”
并且优先级大于等于
“Debug”
的日志:
adb logcat ActivityManager:I PowerManagerService:D *:S
注:
*:S
用于设置所有标记的日志优先级为
S
,这样可以确保仅输出符合条件的日志。
adb logcat *:W //
显示所有优先级大于等于
“warning”
的日志
adb logcat -s PowerManagerService //
显示
PowerManagerService
的日志信息
Logcat
命令列表:
log
输出
-log
选项列表
-b <buffer>
指定要查看的日志缓冲区,可以是
system,events ,radio,main .
默认值是
system
和
main
。
-c
清楚屏幕上的日志
.
-d
输出日志到屏幕上
.
-f <filename>
指定输出日志信息的
<filename>
,默认是
stdout .
-g
输出指定的日志缓冲区,输出后退出
.
-n <count>
设置日志的最大数目
<count>.
,默认值是
4
,需要和
-r
选项一起使用。
-r <kbytes>
每
<kbytes>
时输出日志,默认值为
16
,需要和
-f
选项一起使用
.
-s
设置默认的过滤级别为
silent.
-v <format>
设置日志输入格式
brief —
显示优先级
/
标记和原始进程的
PID (
默认格式
)
process —
仅显示进程
PID
tag —
仅显示优先级
/
标记
thread —
仅显示进程:线程和优先级
/
标记
raw —
显示原始的日志信息,没有其他的元数据字段
time —
显示日期,调用时间,优先级
/
标记,
PID
long —
显示所有的元数据字段并且用空行分隔消息内容
adb logcat -v thread //
使用
thread
输出格式
注意
-v
选项中只能指定一种格式。
-b <buffer>
加载一个可使用的日志缓冲区供查看,默认值是
main
。
radio —
查看包含在无线
/
电话相关的缓冲区消息。(
通话、语音方面的
log,
抓跟网络之间的
ARM9
的
Log,
与
QXDM
的
Log
一般配套使用,所以通话类的问题必须使用
QXDM
抓取
Modem log
和
AP
侧
radio log
)
events —
查看事件相关的消息。(
是基本操作类的
log
。比如:常见的一些错误都可以使用此来抓取
LOG
)
main —
查看主缓冲区
(
默认缓冲区
)
。(
是基本操作类的
log
。比如:常见的一些错误都可以使用此来抓取
LOG
)
adb logcat -b radio //
查看
radio
缓冲区
MTK usr
和
eng
的区别
MTK
补充说明差异
:
*
因
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
版本
* 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
属性