作者:陈旭
在android开发中我们常常遇到很多异常情况,除了经常程序编译时语法错误及配置问题之外,还有一些逻辑上、数据上、操作上面的问题,使得程序不能按开发者设计正确运行,这种情况下,最常见的方法就是使用log显示输出需要验证的信息,以便追查问题。
而我们在使用logcat查看log信息时,也发现log中系统自动打印出很多log信息,下面我们就来做一个简要的log分析。
一、Log产生的时机
1. 程序异常退出——uncausedexception
2. 程序强制关闭——forceclosed
3. 程序无响应——applicationno response
4. 手动生成
二、Log基本信息
以Android2.1为例,android系统中有三大类log信息,每类信息对应一个设备文件:
#defineLOGGER_LOG_MAIN “log/main”
#defineLOGGER_LOG_RADIO “log/radio”
#defineLOGGER_LOG_EVENTS “log/events”
不同类型的log信息使用不同的设备,同时存在两种用户态方式共系统使用LOG体系:Liblog(libcutils 库已包括了liblog)或者bionic libc库、Jni。
内核实现了每个LOG文件驱动,位于drivers/staging/android/logger.c中。
当拿到一个LOG文件,要分成多段来看。LOG文件主要由三大块组成:
1. 系统基本信息:包括内存,CPU,进程队列,虚拟内存,垃圾回收等信息。
2. 时间信息:包括具体的时间点,对应的调用程序以及所做的具体动作,这块信息使我们平时调试和测试时主要关注的信息。
3. 虚拟机信息:包括进程、线程的跟踪信息,如果需要跟踪线程和进程的情况则需要参考这部分信息。
三、Logcat
Logcat位于system/core/logcat/logcat.cpp中,其主要作用是提取保存在内核的log信息显示出来。