当前位置:   article > 正文

Android logs 分析,Android 平台log 总结

dropbox log

一、log 分类

aplog

modem log

anr

log

panic log

tombstones log

dropbox log

monkey log

二、aplog

aplog 是分析android 系统问题的基本log,不管是应用crash、

ANR

还是别的各种系统异常,aplog都是很有必要的。

1). aplog 包含android log 和 kernel log,通过

logcat 命令可以捕获。

service apk_logfs /system/bin/logcat -b system -b events -b main -b

radio -n 20 -r20480 -v threadtime -f

/data/logs/aplog

class late_startdev/log

disabled

seclabel u:r:apk_logfs:s0

这里是在rc 文件里定义的一个log 服务,这样就可以在需要时start这个服务。比如user 版本默认log都是关闭的,但是在user版本遇到问题需要log 时就可以在工程应用里打开log服务捕获log。

-b 指的是要捕获那个缓冲区的log,一般有system events main radio crash

kernel 六种类型缓冲区,前5种是android 默认的,kernel 是各平台商自加,实现各不一样,使用时会有差异。有的打印kernel log 需要logcat -b kernel

,有的就不需要。

frameworks/base/core/java/android/util/Log.java

public static final int LOG_ID_MAIN = 0;

public static final int LOG_ID_RADIO = 1;

public static final int LOG_ID_EVENTS = 2;

public static final int LOG_ID_SYSTEM = 3;

public static final int LOG_ID_CRASH = 4;

-n 指的是循环保存多少个log文件

-r 指每个log文件最大size,单位是k。-r20480 指的是20M。

-f 是log文件路径

2). Aplog读写最终由kernel logger驱动使用环形缓冲区实现。

/linux-3.10/drivers/staging/android/logger.c

blog_dfd0075c0102wfmv.html

Log 设备节点:

/dev/log/main

/dev/log/radio

/dev/log/system

/dev/log/events

3). Kernel log

控制:

下面是kernel 定义的log等级

#define KERN_EMERG

KERN_SOH "0"

#define KERN_ALERT

KERN_SOH "1"

#define KERN_CRIT

KERN_SOH "2"

#define KERN_ERR

KERN_SOH

"3"

#define KERN_WARNING

KERN_SOH "4"

#define KERN_NOTICE

KERN_SOH "5"

#define KERN_INFO

KERN_SOH "6"

#define KERN_DEBUG

KERN_SOH "7"

可以在启动kernel 命令行那里定义需要打印的log等级,比如下面定义打印log等级是8,那么所有小于等于这个值的log level都将被打印,否则不打印。

BOARD_KERNEL_CMDLINE += loglevel=8

如果loglevel 定义成0,那么等级从

1至7的log将不被打印。

可以通过cat /proc/sys/kernel/printk

查看当前的log等级

如下,第一个值就是当前系统log等级。

cat /proc/sys/kernel/printk

0

7

1

7

可以重新设置系统log等级,如下。

echo

8 >

/proc/sys/kernel/printk

4). native 层log 打印:

使用LOGE, LOGI, LOGD, LOGV, LOGW接口打印log,一般默认只有LOGE是打开的,如需要打印别的log,需要在使用时定义#define LOG_NDEBUG 0或者干脆#undef NDEBUG

可见system/core/include/log/log.h中定义。

二、modem log

离线modem log保存也是很必要的,在场测过程,在遇到一些非毕现信号问题,都需要开启离线modem log。

不同的平台,不同的modem芯片,捕获modem log方法不太一样,大致流程都是打开对应的modem log端口,发送相应AT指令(如AT+TRACE=1或at+xsystrace=1)打开log,之后从端口读取log。

三、ANR log

Android默认如下情况将产生ANR:

l应用处理前台广播超过10秒

l应用处理后台广播超过60秒

l应用处理按键消息超过5秒

l应用或者系统启动一个服务超过10秒

所以处理广播和按键消息时不应该直接执行太耗时的动作,可以另外启动线程了执行耗时的动作。

产生ANR时在aplog中里找到相应的ANR log,从这里能看到ANR发生前后CPU的使用情况。如果CPU负载高,需要再看哪个进程引起的,是否读写IO,UI线程执行了耗时动作等;如果CPU负载不高,那可能是系统被死锁,死循环给block住了,需要从每个进程的stack信息中进一步分析。

E ActivityManager: ANR in com.google.android.googlequicksearchbox:search

E ActivityManager: CPU usage from 0ms to 8189ms later:

E ActivityManager:105% 11139/com.google.android.googlequicksearchbox:search: 96% user + 8.6% kernel / faults: 37407 minor 19 major

E ActivityManager: 52% TOTAL: 32% user + 19% kernel + 0.8% iowait + 0.2% softirq

E ActivityManager: CPU usage from 7600ms to 8144ms later:

E ActivityManager: 29% TOTAL: 26% user + 2.9% kernel

同时各进程执行stack保存在/data/anr/trace.txt目录下。一般搜索“held by”字符,看lock是被哪个线程占用了。然后再分析对应线程正在执行什么动作。

- waiting to lock

<0x1c75fa1d> (a com.android.server.am.ActivityManagerService)

held by

thread 63

- waiting to lock

<0x1c75fa1d> (a com.android.server.am.ActivityManagerService)

held by thread 63

- waiting to lock

<0x1c75fa1d> (a com.android.server.am.ActivityManagerService)

held by thread 63

- waiting to lock

<0x1c75fa1d> (a com.android.server.am.ActivityManagerService)

held by thread 63

- waiting to lock

<0x1c75fa1d> (a com.android.server.am.ActivityManagerService)

held by thread 63

- waiting to lock

<0x1c75fa1d> (a com.android.server.am.ActivityManagerService)

held by thread 63

四、panic log

Panic log是分析kernel重启的重要手段,一般能显示重启原因,如空指针重启,狗重启,soft reset、hard rest、调用堆栈信息等。

在启动kernel时通过配置BOARD_KERNEL_CMDLINE += softlockup_panic=0开启关闭panic开关(0关1开)

也可以通过写设备节点来控制(/proc/sys/kernel/softlockup_panic)

panic log在/data/dontpanic目录下,如果这里没有保存下来,在

/data/syttem/dropbox/SYSTEM_LAST_KMSGxxx.txt.gz里也能看到。

手动触发panic命令:echo c > /proc/sysrq-trigger

Native层出现crash时产生tombstones log,保存在/data/tombstones目录下,里面保存了调用堆栈和寄存器信息,需要共享库符号表和addr2line工具来分析。

六、dropbox log

Dropbox收集了系统重启、crash、anr等信息,在分析相应问题的时候可以参考Dropbox目录下的对应文件。

在data/sytem/dropbox目录下。

七、monkey log

是跑monkey时产生的log,里面记录monkey运行过程的一些信息,比如时间点。Monkey跑停时可以根据monkey log里的时间点和aplog对应上。Monkey问题分析同时需要monkey log和aplog等log。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/684766
推荐阅读
相关标签
  

闽ICP备14008679号