【android】 日志获取

  • Post author:
  • Post category:其他


日志信息:

  1. boot日志,通过串口获取
  2. 内核日志:通过dmesg 获取
  3. 系统日志:通过logcat,dumpsys获取
  4. APP日志: 通过am命令获取

1.boot日志

boot日志是android 从上电开始的输出,主要通过串口获取。

2.内核日志dmesg

获取方法:命令行

样例:【cat /proc/kmsg】【dmesg -c】

内核日志,主要是内核阶段打印,当需要调试驱动时,可以使用”kernel动态调试[dynamic_debug ]”功能

  1. kernel编译阶段打开

    CONFIG_DEBUG_FS=y
    CONFIG_DYNAMIC_DEBUG=y

  2. 输入需要调试的文件

    adb root
    adb remount #重新挂载,否则文件是只读的无法写入
    adb shell
    echo -n "file q6adm.c +p" > /sys/kernel/debug/dynamic_debug/control #添加调试文件
    echo -n "file q6adm.c -p" > /sys/kernel/debug/dynamic_debug/control #关闭调试文件

  3. 调整kernel打印等级

    cat /proc/sys/kernel/printk #查看kernel日志等级
    
    7 4 1 7
    
    echo 8 4 1 7 > /proc/sys/kernel/printk #更改kernel日志等级

    (1)第一个参数 7表示小于7优先级消息才会被输出到控制台。

    (2)第二个参数4 表示默认的printk消息优先级别,即printk(“hell world”);优先级为4, 由于4<7,故可以被打印到控制台。

    (3)第三个参数1 表示可接收的最高优先级,当printk disable控制台输出时,设置第一个参数为1,但是,从内核等级来看,还有优先级0,这个是printk最高级优先级,一般用于内核严重消息打印。比如内存错误或者 watchdog reset.也可以设置第一个和第三个参数为0

    (4)第四个参数7 默认控制台优先级,即第一个参数的默认优先级。

  4. dmesg 获取日志即可

    adb shell dmesg -c  > kernel.log

3.系统日志logcat

获取方法:命令行,android studio

样例:

adb logcat -d -v time -b "main"   >  main.txt
adb logcat -d -v time -b "system" >  system.txt
adb logcat -d -v time -b "events" >  events.txt

logcat是andriod系统从kernel启动完成后,Logger系统收集的log,包含framework,app的日志,由于日志较多,推荐使用android studio来分析实时的日志,如果条件不允许,则使用命令行获取日志,再慢慢分析。


logcat Google 详细介绍

3.1 logcat日志分类

logcat日志分类
radio 查看包含无线装置/电话相关消息的缓冲区 无线/电话相关的Log信息
events 查看已经过解译的二进制系统事件缓冲区消息。 系统事件相关的Log信息
main 查看主日志缓冲区(默认),不包含系统和崩溃日志消息。 大部分应用级别的Log信息都在这里
system 查看系统日志缓冲区(默认) 低级别的系统调试Log信息
crash 查看崩溃日志缓冲区(默认)。
all 查看所有缓冲区。
default 报告 main、system 和 crash 缓冲区。

3.2 logcat输出控制 “-v “后的参数

logcat输控制
brief 显示优先级、标记以及发出消息的进程的 PID。
long 显示所有元数据字段,并使用空白行分隔消息。
process 仅显示 PID。
raw 显示不包含其他元数据字段的原始日志消息。
tag 仅显示优先级和标记。
thread 旧版格式,显示优先级、PID 以及发出消息的线程的 TID。
threadtime 显示日期、调用时间、优先级、标记、PID 以及发出消息的线程的 TID。
time 显示日期、调用时间、优先级、标记以及发出消息的进程的 PID。

3.3 logcat日志中的等级标识

等级标识
V 详细(最低优先级)
D 调试
I 信息
W 警告
E 错误
F 严重错误
S 静默(最高优先级,绝不会输出任何内容)

4.系统日志dumpsys


dumpsys google 详解

获取方式:命令行

样例:adb shell dumpsys [-t timeout] [–help | -l | –skip services | service [arguments] | -c | -h]

dumpsys可以获取系统的服务信息,可以使用dumpsys -l 查看dumpsysy支持查看的服务列表。

例如:

  1. dumpsys input:输入设备(如键盘和触摸屏)的状态以及输入事件的处理

    adb shell dumpsys input

  2. dumpsys gfxinfo:进行新能测试

    adb shell dumpsys gfxinfo package-name framestats

  3. dumpsys netstats:设备启动以来收集的网络使用情况统计信息

    adb shell dumpsys netstats detail

  4. dumpsys procstats:查看内存使用情况

    adb shell dumpsys procstats --hours 3
    #adb shell dumpsys meminfo package_name|pid [-d]
    adb shell dumpsys meminfo com.google.android.apps.maps -d

5.APP日志

5.1 am dumpheap


Android am 命令使用

获取方法:命令[adb shell am dumpheap [参数] <process>]

样例:

adb shell am dumpheap com.android.browser /data/local/tmp/test.hprof
#获取内存快照(后缀名必需为.hprof)
adb pull /data/local/tmp/test.hprof ./test.hprof

PC端使用命令:hprof-conv e:\test.hprof e:\test1.hprof进行文件转化,使用mat工具对内存进行查看分析。

6.日志工具

6.1 工具Traceview

Traceview是android平台配备一个很好的性能分析的工具。它可以通过图形化的方式让我们了解我们要跟踪的程序的性能,并且能具体到method。

6.2 bugreport

google官方分析工具,后期补充



版权声明:本文为guiyuan_yelang原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。