绵阳市淘金网络科技有限公司
首页 | 联系方式 | 加入收藏 | 设为首页 | 手机站

产品目录

联系方式

联系人:业务部
电话: 00143- 858031
邮箱:service@zmkuykj.com

当前位置:首页 >> 新闻中心 >> 正文

android crash自动化分析

字号:
摘要:android crash自动化分析

什么是CrashCrash就是由于代码异常而导致App非正常退出现象,也就是我们常说的“崩溃”


Android中有哪些类型Crash

通常情况下有以下两种类型Crash

分为Java Crash、Native Crash


首先来探讨下Java Crash

Java Crash在Android上的特点

1. 这类错误一般是由Java层代码触发的

2. 一般情况下程序出错时会弹出提示框,JVM虚拟机退出

3. 一般的Crash工具都能够捕获,系统也提供了API


举个例子:




通过上面代码可以知道Button并没有被实例化,也就是没有通过id绑定到layout布局中的控件,那在程序运行的时候就会出现空指针异常Java.lang.NullPointerException



通过Crash堆栈信息定位问题


上面就是一个很简单的Crash啦,相信很多同学在开发过程中一定遇到过这种情况,万恶的空指针啊,啊,啊。我们来看看logcat控制台输出给我们输出的堆栈信息




从堆栈信息很快就定位到程序的14行有个空对象




我们通过adb shell logcat获取的信息




这种在开发过程中调试运行很简单,那么产品上线后怎么办呢,通过UncaughtExceptionHandler来记录dump异常日志,具体代码这里就不贴上了,网上一大堆。这是正对开发者的,在代码中使用该API可以记录异常日志,通过网络将日志传回自己的服务器进行分析。但是对于测试人员呢,除了查看监控平台,或者在产品发布之前可以在测试过程中使用开发工具的logcat控制台,或者是adb shell logcat工具,使用这些工具是很容易的,但是当logcat日志中的信息很多,比如程序中埋点log第三方applog等,这样分析起来既耗时又耗力,那么有没有一种方法可以将异常的日志从一大堆日志中分离出来呢,方案是肯定有的,我们看到当异常发生的时候产生的日志与普通的日志是有区别的,而不同的异常日志又按照相同的规律去做记录,那么就可以根据这一规律进行分离。






信息包含了时间,进程名,进程id以及发生的异常体和普通的日志。提到自动化分析,不得不提一款测试工具,MoonLight,工具中的Logcat模块就根据这一规律将异常日志从日志流中分离出来得到单独的文件,那么我们就可以通过查看这个文件,就能快速的知道发生日志的内容,以及是由哪一个进程产生的。那么如何将异常日志做分离处理呢,我们来描述一下其原理,很简单,通过adb shell logcat获取logcat输出流,我们首先根据正则表达式"^\\d{2}-\\d{2}\\s\\d{2}:\\d{2}:\\d{2}.\\d{3}\\s.*"来判断当前的输出流是否包含了时间并且输出流的长度小于10240&&大于0,如果没有包含时间即作为子数据处理,其他的将舍弃。


然后将分离出的日志单独保存在文件中,这样logcat日志自动化分离就完成了,测试人员在测试的过程中也不用去查看那么长的日志文件了。或许你用这样的方式去做logcat日志分离的时候,你会发现有很多异常并不是自己app导致的也被分离出来了,这个时候可以通过进程名进行过滤。但这样并不推荐android系统是一个