日志信息:
- boot日志,通过串口获取
- 内核日志:通过dmesg 获取
- 系统日志:通过logcat,dumpsys获取
- APP日志: 通过am命令获取
1.boot日志
boot日志是android 从上电开始的输出,主要通过串口获取。
2.内核日志dmesg
获取方法:命令行
样例:【cat /proc/kmsg】【dmesg -c】
内核日志,主要是内核阶段打印,当需要调试驱动时,可以使用”kernel动态调试[dynamic_debug ]”功能
-
kernel编译阶段打开
CONFIG_DEBUG_FS=y CONFIG_DYNAMIC_DEBUG=y
-
输入需要调试的文件
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 #关闭调试文件
-
调整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 默认控制台优先级,即第一个参数的默认优先级。
-
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来分析实时的日志,如果条件不允许,则使用命令行获取日志,再慢慢分析。
3.1 logcat日志分类
radio | 查看包含无线装置/电话相关消息的缓冲区 | 无线/电话相关的Log信息 |
events | 查看已经过解译的二进制系统事件缓冲区消息。 | 系统事件相关的Log信息 |
main | 查看主日志缓冲区(默认),不包含系统和崩溃日志消息。 | 大部分应用级别的Log信息都在这里 |
system | 查看系统日志缓冲区(默认) | 低级别的系统调试Log信息 |
crash | 查看崩溃日志缓冲区(默认)。 | |
all | 查看所有缓冲区。 | |
default | 报告 main、system 和 crash 缓冲区。 |
3.2 logcat输出控制 “-v “后的参数
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
获取方式:命令行
样例:adb shell dumpsys [-t timeout] [–help | -l | –skip services | service [arguments] | -c | -h]
dumpsys可以获取系统的服务信息,可以使用dumpsys -l 查看dumpsysy支持查看的服务列表。
例如:
-
dumpsys input:输入设备(如键盘和触摸屏)的状态以及输入事件的处理
adb shell dumpsys input
-
dumpsys gfxinfo:进行新能测试
adb shell dumpsys gfxinfo package-name framestats
-
dumpsys netstats:设备启动以来收集的网络使用情况统计信息
adb shell dumpsys netstats detail
-
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
获取方法:命令[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官方分析工具,后期补充