eg:logcat -c;logcat -G 10M;logcat -v time | grep -E "mmcp|native|wulijiao"
一般的打印信息的级别如下:
V Verbose
D Debug
I Info
W Warn
E Error
F Fatal
S Silent (supress all output)
logcat -c;logcat -G 10M;logcat -v time
logcat -v time -v threadtime > /mnt/sda/sda1/nosync2/1204.txt &
logcat -v time -v threadtime >> /mnt/sda/sda1/nosync2/1204-1.txt &
ANR调试信息
调试手册:
一、anr信息产生的原因:
(1). KeyDispatchTimeout(5 seconds) --主要类型按键或触摸事件在特定时间内无响应
(2). BroadcastTimeout(10 seconds) --BroadcastReceiver在特定时间内无法处理完成
(3). ServiceTimeout(20 seconds) --小概率类型 Service在特定的时间内无法处理完成
二、anr信息解析:
当ANR发生时,往往通过Logcat和traces文件(目录/data/anr)的相关信息输出来定位问题,主要包括以下几个方面:
1 基本信息,包括进程号名,进程号,包名,系统build号,ANR类型等等
2 CPU使用信息,包括活跃进程的CPU平均占用率,IO情况等
3 线程堆栈信息,所属进程包括发生ANR的进程,其父进程,最近有活动的3个进程等
4.当ANR不是发生在system server进程时,mian log会有关键字"ANR in”,如果anr发生在 system server进程,则main log一般不会记录到关键字"ANR in”;
5.system_server进程发生死锁:搜索关键字“am_anr”;
6.通过trace log得知ANR发生在system_server进程,主线程在等待一个锁:
- waiting to lock <0x02e6b629> (a com.android.server.am.ActivityManagerService) held by thread 9
从此处无法得知问题点在哪里,根据第一节的介绍:如果ANR发生在system_server进程,那么main log会记录"WATCHDOG KILLING SYSTEM PROCESS"关键字及异常信息,我们去main log里面看看,确实存在该"WATCHDOG KILLING SYSTEM PROCESS"关键字
三、相关使用
错误信息获取:
logcat -s AndroidRuntime
四、错误
1.线程状态为“waiting for monitor entry”:等待进入临界区
eg:java.lang.Thread.State: BLOCKED (on object monitor)
2.线程状态为“waiting on condition”:等待触发条件,唤醒进程,或者是其调用了sleep
eg:java.lang.Thread.State: WAITING (parking):一直等那个条件发生;
java.lang.Thread.State: TIMED_WAITING (parking或sleeping):定时的,那个条件不到来,也将定时唤醒自己
3.大量线程在“waiting for monitor entry”:全局锁阻塞住了大量线程。
如果短时间内打印的 thread dump 文件反映,随着时间流逝,waiting for monitor entry 的线程越来越多,没有减少的趋势,可能意味着某些线程在临界区里呆的时间太长了,以至于越来越多新线程迟迟无法进入临界区。
4.大量线程在“waiting on condition”:获取第三方资源,第三方资源(比如说网络资源)迟迟未能获得导致未得到响应,大量线程处于等待状态,
5.线程状态为“in Object.wait()”:获得了监视器之后,又调用了 java.lang.Object.wait() 方法
Entry Set中等待:Waiting for monitor entry
Wait Set中等待:in Object.wait()