您的位置:首页 > 移动开发 > Android开发

Android的log分析 一

2015-11-19 18:35 453 查看
一、首先了解一下什么事ANR,简单的说就是系统无响应,会弹出一个对话框,然后让你选择是继续等待还是退出。

默认情况下,在android中Activity的最长执行时间是5秒,BroadcastReceiver的最长执行时间则是10秒。

如何才能够出现ANR呢?利用ADB操作吧,步骤:

# adb shell

# cd data/app

# monkey -p com.xxx.xxx -v 3000 (com.xxx.xxx是你应用程序的包名,如果想知道monkey详细用法,执行 monkey help )
ANR出现之后系统就会弹出一个log信息,这个信息存在手机的/data/log中,可以使用pull将这个log拖到电脑上。当然,你在复现ANR的过程中也可以将log信息存储到指定的文件中,这就看你自己的决定了。
二、log信息获取了,该怎么看呢
首先需要了解log的种类,大致有6中

Log.v() Log.d() Log.i() Log.w() Log.e()以及Log.a()
(android 4.0新增加的)。

根据首字母对应 VERBOSEDEBUG,INFO,WARN,ERROR,Assert。

这个可以在eclipse中看到。

具体能够显示什么信息呢。

1、Log.v 的调试颜色为黑色的,任何消息都会输出,这里的v代表verbose啰嗦的意思,平时使用就是Log.v("","");

2、Log.d的输出颜色是蓝色的,仅输出debug调试的意思,但他会输出上层的信息,过滤起来可以通过DDMS的Logcat标签来选择.

3、Log.i的输出为绿色,一般提示性的消息information,它不会输出Log.v和Log.d的信息,但会显示i、w和e的信息

4、Log.w的意思为橙色,可以看作为warning警告,一般需要我们注意优化Android代码,同时选择它后还会输出Log.e的信息。

5、Log.e为红色,可以想到error错误,这里仅显示红色的错误信息,这些错误就需要我们认真的分析,查看栈的信息了。

6 Log.a为4.0新增加的。
启动Eclipse,打开DDMS大家可以在LogCat里看见(前提是android
4.0的ADT)

三、获得了log,该如何分析,查看呢

Log分为Fatal和ANR

在什么情况下才会产生log呢?????

一般在如下几种情况会产生log文件::::

1,程序异常退出,uncausedexception
(属于Fatal)

2,程序强制关闭,ForceClosed
(简称FC) (属于Fatal)

3,程序无响应,ApplicationNo
Response(简称ANR)

ANR出现的情况有以下两种

A 界面操作按钮的点击等待响应时间超过5秒

B HandleMessage回调函数执行超过10秒,BroadcasterReciver里的onRecive()方法处理超过10秒

4,手动生成。

四、众多的信息中如何找到问题呢?
首先需要对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: 0kB

SwapTotal: 0 kB

SwapFree: 0 kB

Dirty: 44kB

Writeback: 0 kB

AnonPages: 129028 kB

Mapped: 73728 kB

Shmem: 1148kB

Slab: 13072kB

SReclaimable: 4564 kB

SUnreclaim: 8508 kB

KernelStack: 3472 kB

PageTables: 12172 kB

NFS_Unstable: 0 kB

Bounce: 0kB

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-1516:41:43.671 W/PackageManager( 2466): Unknown permissioncom.wsomacp.permission.PROVIDER in package com.android.mms

01-1516:41:43.671 I/ActivityManager( 2466): Force stopping packagecom.android.mms uid=10092

01-1516:41:43.675 I/UsageStats( 2466): Something wrong here, didn't expectcom.sec.android.app.twlauncher to be paused

01-1516:41:44.108 I/ActivityManager( 2466): Start proccom.sec.android.widgetapp.infoalarm for servicecom.sec.android.widgetapp.infoalarm/.engine.DataService:
pid=20634uid=10005 gids={3003, 1015, 3002}

01-1516:41:44.175 W/ActivityManager( 2466): Activity pause timeout forHistoryRecord{48589868com.sec.android.app.twlauncher/.Launcher}

01-1516:41:50.864 I/KeyInputQueue( 2466): Input event

01-1516:41:50.866 D/KeyInputQueue( 2466): screenCaptureKeyFlag setting0

01-1516:41:50.882 I/PowerManagerService( 2466): Ulight 0->7|0

01-1516:41:50.882 I/PowerManagerService( 2466): Setting target 2: cur=0.0target=70 delta=4.6666665 nominalCurrentValue=0

01-1516:41:50.882 I/PowerManagerService( 2466): Scheduling lightanimator!

01-1516:41:51.706 D/PowerManagerService( 2466): enableLightSensortrue

01-1516:41:51.929 I/KeyInputQueue( 2466): Input event

01-1516:41:51.933 W/WindowManager( 2466): No focus window, dropping:KeyEvent{action=0 code=26 repeat=0 meta=0 scancode=26mFlags=9}

3、虚拟机信息, 包括进程的,线程的跟踪信息,这是用来跟踪进程和线程具体点的好地方。

------VM TRACES JUST NOW (/data/anr/traces.txt.bugreport: 2011-01-1516: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 -----

Cmdline: com.android.mms

DALVIKTHREADS:

"main"prio=5 tid=1 NATIVE

|group="main" sCount=1 dsCount=0 s=N obj=0x4001d8d0self=0xccc8

|sysTid=21161 nice=0 sched=0/0 cgrp=default handle=-1345017808

|schedstat=( 4151552996 5342265329 10995 )

atandroid.media.MediaPlayer._reset(Native Method)

atandroid.media.MediaPlayer.reset(MediaPlayer.java:1218)

atandroid.widget.VideoView.release(VideoView.java:499)

atandroid.widget.VideoView.access$2100(VideoView.java:50)

atandroid.widget.VideoView$6.surfaceDestroyed(VideoView.java:489)

atandroid.view.SurfaceView.reportSurfaceDestroyed(SurfaceView.java:572)

atandroid.view.SurfaceView.updateWindow(SurfaceView.java:476)

atandroid.view.SurfaceView.onWindowVisibilityChanged(SurfaceView.java:206)

atandroid.view.View.dispatchDetachedFromWindow(View.java:6082)

atandroid.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:1156)

atandroid.view.ViewGroup.removeAllViewsInLayout(ViewGroup.java:2296)

atandroid.view.ViewGroup.removeAllViews(ViewGroup.java:2254)

atcom.android.mms.ui.SlideView.reset(SlideView.java:687)

atcom.android.mms.ui.SlideshowPresenter.presentSlide(SlideshowPresenter.java:189)

atcom.android.mms.ui.SlideshowPresenter$3.run(SlideshowPresenter.java:531)

atandroid.os.Handler.handleCallback(Handler.java:587)

atandroid.os.Handler.dispatchMessage(Handler.java:92)

atandroid.os.Looper.loop(Looper.java:123)

atandroid.app.ActivityThread.main(ActivityThread.java:4627)

atjava.lang.reflect.Method.invokeNative(Native Method)

atjava.lang.reflect.Method.invoke(Method.java:521)

atcom.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)

atcom.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

atdalvik.system.NativeStart.main(NativeMethod)

五、查看log的信息。
这主要是根据log的类型进行查看的,如果出现的是ANR现象,直接在log中搜索”ANR in“
如果出现的是FATAL的现象,直接在log中搜索“FATAL”

目前先到这里,,,,,
,,
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: