浏览 3490 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-03-13
一、课程目标: 熟悉使用android log形式 学会理解系统log 通过Log分析ANR 和 Force Closed所引起的程序问题 (ANR---应用程序无响应) (Force Closed---强行关闭) 知道系统Log文件的存放路径 二、重点难点: 如何通过Log快速定位到Root Cause 的位置 三、考核目标: 如何在程序中打出Log 以及Log的分类区别 ? 给你一个Log文件,如何定位到问题所在? 四、课后练习: 写一个Demo 用Log.i 打印出Activity生命周期 从开发机或者模拟器中取一个log文件,找异常处分析,尽量翻译成自然语言 l 介绍一款做自动化压力测试的工具---Monkey(ADB、DDMS和Monkey工具,先只做简单介绍,以后会有专题的详解) 1.安装一个第三方应用程序到模拟器 2.通过Monky运行压力测试 , monkey -p package -v frequency 3.出现ANR or Force closed,取得log文件 4.分析log文件 l 利用DDMS来看Logcat中的日志,Log的种类: 1.V-Verbose 2.D-Debug 3.I-Info 4.W-Warn 5.E-Error 注:重要级依次递增 l 关于日志文件 1.何时产生? 一般在如下几种情况会产生log文件 。 程序异常退出 , uncaused exception 程序强制关闭 ,Force Closed (简称FC) 程序无响应 , Application No Response (简称ANR) 2.产生的位置 3.Log文件的组成 1.系统基本信息 ,包括 内存,CPU ,进程队列 ,虚拟内存 , 垃圾回收等信息 。 ------ MEMORY INFO (/proc/meminfo) ------ ------ CPU INFO (top -n 1 -d 1 -m 30 -t) ------ ------ PROCRANK (procrank) ------ ------ VIRTUAL MEMORY STATS (/proc/vmstat) ------ ------ VMALLOC INFO (/proc/vmallocinfo) ------ 格式如下: ------ MEMORY INFO (/proc/meminfo) ------ MemTotal: 347076 kB MemFree: 56408 kB Buffers: 7192 kB Cached: 104064 kB SwapCached: 0 kB Active: 192592 kB Inactive: 40548 kB Active(anon): 129040 kB Inactive(anon): 1104 kB Active(file): 63552 kB Inactive(file): 39444 kB Unevictable: 7112 kB Mlocked: 0 kB SwapTotal: 0 kB SwapFree: 0 kB Dirty: 44 kB Writeback: 0 kB AnonPages: 129028 kB Mapped: 73728 kB Shmem: 1148 kB Slab: 13072 kB SReclaimable: 4564 kB SUnreclaim: 8508 kB KernelStack: 3472 kB PageTables: 12172 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 173536 kB Committed_AS: 7394524 kB VmallocTotal: 319488 kB VmallocUsed: 90752 kB VmallocChunk: 181252 kB 2,事件信息 , 也是我们主要分析的信息 。 ------ VMALLOC INFO (/proc/vmallocinfo) ------ ------ EVENT INFO (/proc/vmallocinfo) ------ 格式如下: ------ SYSTEM LOG (logcat -b system -v time -d *:v) ------ 01-15 16:41:43.671 W/PackageManager( 2466): Unknown permission com.wsomacp.permission.PROVIDER in package com.android.mms 01-15 16:41:43.671 I/ActivityManager( 2466): Force stopping package com.android.mms uid=10092 01-15 16:41:43.675 I/UsageStats( 2466): Something wrong here, didn't expect com.sec.android.app.twlauncher to be paused 01-15 16:41:44.108 I/ActivityManager( 2466): Start proc com.sec.android.widgetapp.infoalarm for service com.sec.android.widgetapp.infoalarm/.engine.DataService: pid=20634 uid=10005 gids={3003, 1015, 3002} 01-15 16:41:44.175 W/ActivityManager( 2466): Activity pause timeout for HistoryRecord{48589868 com.sec.android.app.twlauncher/.Launcher} 01-15 16:41:50.864 I/KeyInputQueue( 2466): Input event 01-15 16:41:50.866 D/KeyInputQueue( 2466): screenCaptureKeyFlag setting 0 01-15 16:41:50.882 I/PowerManagerService( 2466): Ulight 0->7|0 01-15 16:41:50.882 I/PowerManagerService( 2466): Setting target 2: cur=0.0 target=70 delta=4.6666665 nominalCurrentValue=0 01-15 16:41:50.882 I/PowerManagerService( 2466): Scheduling light animator! 01-15 16:41:51.706 D/PowerManagerService( 2466): enableLightSensor true 01-15 16:41:51.929 I/KeyInputQueue( 2466): Input event 01-15 16:41:51.933 W/WindowManager( 2466): No focus window, dropping: KeyEvent{action=0 code=26 repeat=0 meta=0 scancode=26 mFlags=9} 3,虚拟机信息 , 包括进程的,线程的跟踪信息,这是用来跟踪进程和线程具体点的好地方 。 ------ VM TRACES JUST NOW (/data/anr/traces.txt.bugreport: 2011-01-15 16:49:02) ------ ------ VM TRACES AT LAST ANR (/data/anr/traces.txt: 2011-01-15 16:49:02) ------ 格式如下 : ----- pid 21161 at 2011-01-15 16:49:01 ----- Cmd line: com.android.mms DALVIK THREADS: "main" prio=5 tid=1 NATIVE | group="main" sCount=1 dsCount=0 s=N obj=0x4001d8d0 self=0xccc8 | sysTid=21161 nice=0 sched=0/0 cgrp=default handle=-1345017808 | schedstat=( 4151552996 5342265329 10995 ) at android.media.MediaPlayer._reset(Native Method) at android.media.MediaPlayer.reset(MediaPlayer.java:1218) at android.widget.VideoView.release(VideoView.java:499) at android.widget.VideoView.access$2100(VideoView.java:50) at android.widget.VideoView$6.surfaceDestroyed(VideoView.java:489) at android.view.SurfaceView.reportSurfaceDestroyed(SurfaceView.java:572) at android.view.SurfaceView.updateWindow(SurfaceView.java:476) at android.view.SurfaceView.onWindowVisibilityChanged(SurfaceView.java:206) at android.view.View.dispatchDetachedFromWindow(View.java:6082) at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:1156) at android.view.ViewGroup.removeAllViewsInLayout(ViewGroup.java:2296) at android.view.ViewGroup.removeAllViews(ViewGroup.java:2254) at com.android.mms.ui.SlideView.reset(SlideView.java:687) at com.android.mms.ui.SlideshowPresenter.presentSlide(SlideshowPresenter.java:189) at com.android.mms.ui.SlideshowPresenter$3.run(SlideshowPresenter.java:531) at android.os.Handler.handleCallback(Handler.java:587) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:123) at android.app.ActivityThread.main(ActivityThread.java:4627) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:521) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) at dalvik.system.NativeStart.main(Native Method) --------------------------------------------------------------------------------------------------------------------------------------- 4.如何利用Log文件 1,如果是ANR问题 , 则搜索“ANR”关键词 。 快速定位到关键事件信息 。 2,如果是ForceClosed 和其它异常退出信息,则搜索"Fatal" 关键词, 快速定位到关键事件信息 。 3,定位到关键事件信息后 , 如果信息不够明确的,再去搜索应用程序包的虚拟机信息 ,查看具体的进程和线程跟踪的日志,来定位到代码 。 (用这种方法,出现问题,根本不需要断点调试 , 直接定位到问题,屡试不爽 。) 具体方法,不在帖子中展示,请见谅! 今日问答:(请大家踊跃在帖子中回复) 一、何时会产生ANR呢? 二、如何在程序中打出Log 以及Log的分类区别 ? 给你一个Log文件,如何定位到问题所在? 本讲对Android中Log的介绍,下一讲将进入ProcessLifecycle,内容预告:AAF110427_进程生命周期ProcessLifecycle,敬请期待。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |