Android Log分析
来源:互联网 发布:mac虚拟机分辨率设置 编辑:程序博客网 时间:2024/06/05 19:18
Android平台提供了多种log输出,这里主要针对常见的几种问题提供一些基础的分析指南。
1. Java Crash
Java Crash是我们最为常见的严重错误了。在Logcat中,可以找到其报错的地方,通过其标注的位置开始调查代码。
例如:
11-21 07:26:07.273 E/AndroidRuntime( 3755): FATAL EXCEPTION: main11-21 07:26:07.273 E/AndroidRuntime( 3755): java.lang.NullPointerException11-21 07:26:07.273 E/AndroidRuntime( 3755): at com.csi.player.mediaCallback(SourceFile:422)...
在这里,log里面已经明确说明了错误的类型为"java.lang.NullPointerException", 和发现这个问题的代码"mediaCallback.java"的422行。
常见的严重错误有如下几类:
NullPointerException: 空对象错误
IllegalStateException:非法状态,比如在View没有刷出来的时候去触摸。
IndexOutOfBoundsException
IllegalArgumentException
ExceptionInInitializerError
ClassCastException
RuntimeException
UnknownFormatConversionException
UnsupportContentTypeException
CursorIndexOutOfBoundsException
2.ANR
ANR是一种常见的严重错误,在logcat中会直接给出造成ANR的原因,例如:
11-01 18:16:15.966 E/ActivityManager( 344): ANR in com.android.systemui11-01 18:16:15.966 E/ActivityManager( 344): Reason: Broadcast of Intent { act=android.intent.action.TIME_TICK flg=0x40000014 (has extras) }
以上这个ANR就是由BroadcastTimeout引起的。
常见的ANR原因有如下:
KeyDispatchTimeout(5 seconds)Key事件响应超时BroadcastTimeout(10 seconds)BroadcastReceiver超时ServiceTimeout(20 seconds)Service超时当ANR发生时,我们可以在/data/anr/下面发现响应的trace.txt里面会有ANR的callstack,有助于我们定位问题。
3. Tombstone
tombstone一般是由Dalvik错误、状态监视调试器、C层代码以及libc的一些问题导致的。当系统发生tombstone的时候,kernel首先会上报一个严重的警告信号(serious signal),上层接收到之后,进程的调试工具会把进程中当时的调用栈现场保存起来,并在系统创建了data/tombstones目录后把异常时的进程信息写在此目录里面,开发者需要通过调用栈来分析整个调用流程来找出出问题的点。
这里主要介绍一下常用的分析步骤:
a. 首先查看日志文件,搜索"SEGV_MAPERR" 或者 "SEGV_ACCERR",
注: SEGV_MAPERR地址没有映射到对象,SEGV_ACCERR对映射的对象没有权限
例如:
pid: 122, tid: 14745, name: Binder_2 >>> /system/bin/mediaserver <<<signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000058 eax 00000000 ebx 41bbf784 ecx 00000000 edx 00000009 esi 450578f0 edi 40378054 xcs 00000073 xds 0000007b xes 0000007b xfs 00000000 xss 0000007b eip 4088a5c2 ebp 45e15cb8 esp 45e15ca0 flags 00010297
b. 再看backtrace
#00 pc 000085c2 /system/lib/libcameraservice.so (android::CameraHardwareInterface::__set_buffer_count(preview_stream_ops*, int)+34) #01 pc 0003b6fa /system/lib/hw/camera.XXXX.so (android::PreviewThread::allocateGfxPreviewBuffers(int)+154) #02 pc 0003ce83 /system/lib/hw/camera.XXXX.so (android::PreviewThread::threadLoop()+1203) #03 pc 0001a2bc /system/lib/libutils.so (android::Thread::_threadLoop(void*)+556) #04 pc 0000dda8 /system/lib/libc.so (__thread_entry+248) #05 pc 0001b031 /system/lib/libc.so #06 pc 00001f2c /system/lib/libc.so
从这段log来看,发现问题发生时,出错的lib为libcameraservice.so。
c. 如果需要进一步分析,需要动用symbol文件,具体步骤这次就不详述了。
4. Memory Leak
在Logcat输出中,会出现
E/AndroidRuntime(1112):Caused by: java.lang.OutOfMemoryError: bitmap sizeexceeds VM budgetE/AndroidRuntime(1112):at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)E/AndroidRuntime(1112):at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:447)E/AndroidRuntime(1112):at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:323)E/AndroidRuntime(1112):
这里1112是进程的pid,代表出现OOM的应用。如果需要详细分析,一般来说需要先制造出来hprof文件,详细做法请参考Memaory debug。
5. Kernel Panic
通过demsg命令可以查看到内核log输出。查找kernel panic和Bug等字样就能找到。
- Android Log 分析
- android log 分析
- Android Log分析
- Android log分析
- android log分析
- android Log分析
- android Log 的分析
- Android ANR Log分析
- Android log 分析
- Android 分析log
- android log机制分析
- Android anr log 分析
- Android 分析log
- android Log文件分析
- Android 分析log
- Android 分析log
- Android 分析log
- Android Log分析
- Maven打包
- Notepad++中设置Windows、Unix、Mac三种行尾换行符格式间的转换
- iOS 比较时间 和 获取当前时间
- 匹配中文字符的正则表达式
- 关于node.js的学习17
- Android Log分析
- storyboard使用教程
- Java序列化之Externalizable
- Java中的抽象
- 原型模式
- iOS APP上架流程及上架过程中遇到的问题总结
- 数据泵使用汇总
- hadoop安装和维护01--JDK环境部署
- Android获取手机制作商,系统版本等