当前位置: 首页 > 编程日记 > 正文

Android中对Log日志文件的分析[转]

一,Bug出现了, 需要“干掉”它 

bug一听挺吓人的,但是只要你懂了,android里的bug是很好解决的,因为android里提供了LOG机制,具体的底层代码,以后在来分析,只要你会看bug,

android里应用开发也就很简单了。

那我们先来看看android里的ANR,怎么出现ANR呢,很简单。

# adb shell

# cd data/app

#  monkey   -p  com.xxx.xxx   -v   3000      (com.xxx.xxx是你应用程序的包名,如果想知道monkey详细用法,执行  monkey  help  )

实际上很多优秀android应用都会出现ANR,比如UC浏览器,360等等,如果你有兴趣可以回去试试,

      这样,ANR出现了。 开始做修改准备工作  ,得到log文件。

有人问log文件在哪儿?
一般在/data/log下面(但是真机才有的)。你可以通过执行命令adb shell进去看看,用pull把log文件拉到你的电脑里
 
好,得到log文件了,我们就准备开始工作了 。 我将详细的log文件上传到附件供大家参考。

下载地址为  http://download.csdn.net/detail/andy_android/3785393

二,Log的种类

android.util.Log常用的方法有以下六个:Log.v() Log.d() Log.i() Log.w() , Log.e()以及Log.a() (android 4.0新增加的)。根据首字母对应             VERBOSEDEBUG,INFO,WARNERROR,Assert。

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文件,如何看日志信息 Logandroid中的地位非常重要,要是作为一个android程序员不能过分析log这关,算是android没有入门吧。 下面我们就来说说如何处理log文件。

Log分为Fatal和ANR

什么时候会有Log文件的产生?
Log
的产生大家都知道, 大家也都知道通过DDMS来看log(这个就不用说了),但什么时候会产生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 bj=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文件的基本步骤。1,如果是ANR问题, 则搜索“ANR”关键词。 快速定位到关键事件信息 。
2
,如果是ForceClosed和其它异常退出信息,则搜索"Fatal"关键词,快速定位到关键事件信息 。
3
,定位到关键事件信息后, 如果信息不够明确的,再去搜索应用程序包的虚拟机信息,查看具体的进程和线程跟踪的日志,来定位到代码。 

用这种方法,出现问题,根本不需要断点调试, 直接定位到问题,屡试不爽 。 
下面,我们就开始来分析这个例子的log

打开log文件, 由于是ANR错误,因此搜索"ANR",为何要加空格呢,你加上和去掉比较一下就知道了 。可以屏蔽掉不少保存到anr.log文件的无效信息。 

定位到关键的事件信息如下:
01-1516:49:02.433 E/ActivityManager( 2466): ANR in com.android.mms(com.android.mms/.ui.SlideshowActivity)
01-1516:49:02.433 E/ActivityManager( 2466): Reason:keyDispatchingTimedOut
01-1516:49:02.433 E/ActivityManager( 2466): Load: 0.6 / 0.61 / 0.42
01-1516:49:02.433 E/ActivityManager( 2466): CPU usage from 1337225ms to57ms ago:
01-1516:49:02.433 E/ActivityManager( 2466):   sensorserver_ya:8% = 0% user + 8% kernel / faults: 40 minor
......


01-1516:49:02.433 E/ActivityManager( 2466):  -com.android.mms:0% = 0% user + 0% kernel
01-1516:49:02.433 E/ActivityManager( 2466):  -flush-179:8: 0% =0% user + 0% kernel
01-1516:49:02.433 E/ActivityManager( 2466): TOTAL: 25% = 10% user + 14%kernel + 0% iowait + 0% irq + 0% softirq
01-1516:49:02.436 I/        ( 2466):dumpmesg >"/data/log/dumpstate_app_anr.log"


我们用自然语言来描述一下日志,这也算是一种能力吧。 
01-1516:49:02.433 E/ActivityManager( 2466): ANR in com.android.mms(com.android.mms/.ui.SlideshowActivity)
翻译:在16:492433毫秒的时候ActivityManager

相关文章:

Unix下C程序内存泄漏检测工具Valgrind安装与使用

Valgrind是一款用于内存调试、内存泄漏检测以及性能分析的软件开发工具。 Valgrind的最初作者是Julian Seward,他于2006年由于在开发Valgrind上的工作获得了第二届Google-OReilly开源代码奖。 Valgrind遵守GNU通用公共许可证条款,是一款自由软件。 官网…

【CTF】实验吧 robomunication

用audacity软件,猜测是摩斯密码 听到的都是“bi”或者“bu”,这里用b代表“bi”,“p”代表“bu” bbbb b bpbb bpbb ppp bpp bbbb bp p bb bbb p bbbb b pbp b pbpp bb p bb bbb (p b bb) ppp ppp bppb pbbb b b bppb 打括号那里显得较分散一…

Mac原生Terminal快速登录ssh

1. 创建rsa key 在终端中输入以下命令: ssh-keygen -t rsa完成之后可以在~/.ssh目录下找到公钥和私钥 如果你与我一样有使用gitlab,那么这个秘钥应该已经存在了,所以就不用重新建立了。 2.上传公钥到服务器 有教程会说,用scp或者类…

Java开发环境的搭建以及使用eclipse从头一步步创建java项目

原文:出自本人的Linux博客http://blog.csdn.net/unix21/article/details/18813173 一、Java 开发环境的搭建 这里主要说windows环境下怎么配置Java环境。如果是Linux环境参考本博客另一篇文章即可:Linux环境安装卸载JDK1.首先安装JDK java的SDK简称JDK。…

全球首届APMCon,带你给“应用性能”把把脉

前段时间,美国苹果公司应用程序购买商店和手机等一系列应用因技术故障中断服务,持续了约两个半小时。故障发生后,世界多地苹果用户纷纷吐槽无法购买和更新手机应用、无法备份等。其实,这不是苹果公司在线服务第一次掉线&#xff0…

【CTF】实验吧 The Flash-14

标题的提示是:闪电侠的第十四集用到的加密方式(看来写CTF题要无所不知,不然咋能想到是一部剧) 根据两两一组将数据分类 54 43 32 52 22 44 55 34 22 51 52 22 44 34 22 23 11 34 12 按照上表的对应关系可以得到…

XML 标签 首字母转换为大写

2019独角兽企业重金招聘Python工程师标准>>> public static String xmlTagCapitalize(String xmlStr) {String regex "<(/*[A-Za-z])>";regex "<([^>]*)>";Matcher matcher Pattern.compile(regex).matcher(xmlStr);StringBu…

简析 .NET Core 构成体系

简析 .NET Core 构成体系 Roslyn 编译器RyuJIT 编译器CoreCLR & CoreRTCoreFX(.NET Core Libraries).NET Core 代码开发、部署、运行过程总结前文介绍了.NET Core 在整个.NET 平台所处的地位&#xff0c;以及与.NET Framework的关系(原文链接)&#xff0c;本文将详细介绍.N…

【CTF】实验吧 奇怪的短信

和实验吧 The Flash-14有些类似&#xff0c;总共的数字数目是偶数&#xff0c;所以两两分开&#xff0c;题干中的“短信”是提示&#xff0c;观察两两分组的第二个数字没有超过四的&#xff0c;可以想到手机上的九键 例如第一组数&#xff1a;33 对应的是F&#xff0c;最后全部…

mybatis结合log4j打印SQL日志

mybatis结合log4j打印SQL日志1.Maven引用jar包 默认的mybatis不能打印出SQL日志&#xff0c;不便于查看调试&#xff0c;需要结合log4jdbc-log4j2就可以完整的输入SQL的调试信息。 pom.xml 配置maven&#xff0c;注意以下3个都需要<dependency><groupId>org.bgee.l…

EOS Chain/Wallet RPC API的PHP开发包

2019独角兽企业重金招聘Python工程师标准>>> 介绍一个EOS Chain/Wallet RPC API的PHP开发包。 开始 你可以查看EOS的RPC API参考&#xff0c;但要注意缺少一些较新的方法。Wallet RPC API实现EOS v1.1.0 of RPC API reference。此外&#xff0c;这些文档中的一些示例…

深入浅出理解Paxos算法

Paxos算法是莱斯利兰伯特&#xff08;英语&#xff1a;Leslie Lamport&#xff0c;LaTeX中的「La」&#xff09;于1990年提出的一种基于消息传递且具有高度容错特性的一致性算法。 Paxos算法一开始非常难以理解&#xff0c;但是一旦理解其实也并不难&#xff0c;之所以难理解其…

显示界面的普通仓库

实际脚本如下 procedure xianshi_PTCK(Npc: TNormNpc; Player: TPlayObject);procedure CWPRPTCK_QWP(Npc: TNormNpc; Player: TPlayObject; Args: TArgs); beginplayer.TakebackStorageItem(Args.Int[0]);cangku.xianshi_PTCK(npc,player); end; procedure xianshi_PTCK(Np…

【CTF】实验吧 围在栅栏中的爱

对摩斯密码进行解码&#xff1a;kiqlwtfcqgnsoo QWE是键盘上的前三个&#xff0c;ABC是26个字母的前三个。所以&#xff0c;二者有这样的对应关系。 #include <stdio.h> #include <string.h> int main () {char zc[]"abcdefghijklmnopqrstuvwxyz"; cha…

nginx tomcat https

1.首先确保机器上安装了openssl和openssl-devel #yum install openssl #yum install openssl-devel2. server {listen 443 ssl;server_name vota.swmmotors.com.cn;ssl_certificate cert/vota.swmmotors.com.cn_bundle.crt; #当前conf/目录下ssl_certificate_…

Spring4实战学习笔记

《Spring4实战 第4版》2016年4月新出版的&#xff0c;之前的第三版看起来还是不错的&#xff0c;所以看到新版就直接买下来。 英文版源码地址&#xff1a;Spring in Action, Fourth Edition Covers Spring 4 1.IOC装配Bean 参考【Spring实战4 2.2】&#xff0c;作者提倡无XML…

vmstat 命令

2019独角兽企业重金招聘Python工程师标准>>> 1.用法 vmstat [-a] [-n] [-S unit] [delay [ count]] vmstat [-s] [-n] [-S unit] vmstat [-m] [-n] [delay [ count]] vmstat [-d] [-n] [delay [ count]] vmstat [-p disk partition] [-n] [delay [ count]] vmstat […

【CTF】实验吧 疑惑的汉字

考察的是当铺密码&#xff1a; 王夫 井工 夫口 由中人 井中 夫夫 由中大&#xff1a;67 84 70 123 82 77 125 当铺密码就是一种将中文和数字进行转化的密码&#xff0c;算法相当简单:当前汉字有多少笔画出头&#xff0c;就是转化成数字几。

Date PHP

转载于:https://www.cnblogs.com/liuliang389897172/p/10087895.html

Java多线程的11种创建方式以及纠正网上流传很久的一个谬误

创建线程比较传统的方式是继承Thread类和实现Runnable&#xff0c;也可以用内部类&#xff0c;Lambda表达式&#xff0c;线程池&#xff0c;FutureTask等。 经常面试会问到继承Thread类和实现Runnable的区别&#xff0c;然后网上会流传如下这样的说法&#xff0c;这是错误的。…

【CTF】实验吧 古典密码

一共是35个字符分成5*7或者7*5 最终选择5行7列 首先变动第一行的位置&#xff0c;然后根据第一行变动的位置&#xff0c;依次变动下面的行 OCU{CFT ELXOUYD ECTNGAH OHRNFIE NM}IOTA CTF{COU LTYOUEX CHANGET HEINFOR MATION} CTF{COULTYOUEXCHANGETHEINFORMATION}

对比React Native、dcloud、LuaView三个框架技术(内部)

转载自&#xff1a;http://www.jianshu.com/p/ee1cdb33db8d主要对比React Native和5SDK&#xff08;就是dcloud的SDK&#xff09;两个&#xff1a; 开发语言&#xff1a;三个都是用其他语言来统一开发IOS、android应用的框架技术&#xff0c;其中&#xff0c;React Native是使用…

spring boot 临时文件过期

2019独角兽企业重金招聘Python工程师标准>>> 第一种方案&#xff1a;-Djava.io.tmpdir /xxx 第二种方案&#xff1a; 线上的系统中不能上传文件了&#xff0c;出现如下错误&#xff1a; org.springframework.web.multipart.MultipartException: Could not parse mu…

ASP.NET MVC+Bootstrap个人博客之打造清新分页Helper(三)

0. 没有找到一款中意的分页插件&#xff0c;又不想使用现成的(丑到爆)&#xff0c;所以自己动手造一个吧 先看下效果(其实也不咋滴...)&#xff1a; 有点另类&#xff0c;分页直接是在后台拼接好html&#xff0c;然后发送到前台的&#xff1a; 1. 分页容器&#xff1a; <di…

支撑Java框架的基础技术:泛型,反射,动态代理,cglib

以Spring为例要想看明白他的源码需要彻底理解Java的一些基础技术泛型&#xff0c;反射同时对于一些高级技术例如动态代理&#xff0c;cglib和字节码技术也需要掌握&#xff0c;下面就按章节来一一说清楚这些技术的核心部分&#xff0c;最后手写一个简单的Spring框架。 一.静态代…

【CTF】实验吧 困在栅栏里的凯撒

题目先提到栅栏&#xff0c;再提到凯撒&#xff0c;按照顺序先栅栏解码&#xff0c;再凯撒解码。 一般密码的开头不是flag就是key或者ctf 所以选择“6栏”&#xff0c;在进行凯撒解码 在所有组合中&#xff0c;发现CTF即为flag

经典算法书籍推荐以及算法书排行【算法四库全书】

经典算法书籍推荐以及算法书排行【算法四库全书】 作者&#xff1a;霞落满天 https://linuxstyle.blog.csdn.net/ https://blog.csdn.net/21aspnet 行文方式&#xff1a;类似《四库全书》截取经典算法书目录和精华篇章 版权说明&#xff1a;本文于2019年5月5日首发于CS…

【CTF】实验吧 Fair-Play

它的标题就是题解的提示&#xff1a;Play-Fair Playfair解密算法首先将密钥填写在一个5*5的矩阵中&#xff08;去Q留Z&#xff09;&#xff0c;矩阵中其它未用到的字母按顺序填在矩阵剩余位置中&#xff0c;根据替换矩阵由密文得到明文。 对密文解密规则如下&#xff1a; 1 若c…

【DAY23】JVM与反射的学习笔记

JVM:-----------------1.JVM: java virtual machine.2.class file *.class3.ClassLoader4.runtime data area运行时数据区。1.Method area : 方法区.(shared)供所有线程共享.2.heap(shared):供所有线程共享.3.java stack(栈区)独占的。4.native method stack(本地方法栈)独占5.…

BZOJ2281:[SDOI2011]黑白棋(博弈论,组合数学,DP)

Description 小A和小B又想到了一个新的游戏。这个游戏是在一个1*n的棋盘上进行的&#xff0c;棋盘上有k个棋子&#xff0c;一半是黑色&#xff0c;一半是白色。最左边是白色棋子&#xff0c;最右边是黑色棋子&#xff0c;相邻的棋子颜色不同。小A可以移动白色棋子&#xff0c;小…