Andoid解bug方法

Android Bug收集解决方案

2017-04-05  本文已影响0人  Haraway

一.概述

  本文主要介绍Android平台下bug类型和产生原因、崩溃捕获和收集解决方案、以及bugly的使用方法。Android平台下bug类型主要有Crash、ANR、卡顿、服务器异常等。要实现Android Bug捕获和收集的困难主要有这么几个:

  1、如何捕获崩溃;
  2、如何获取堆栈信息;
  3、将错误日志上传到指定服务器。

  采用腾讯bugly的错误日志功能能捕获应用Java Crash、C/C++ Native Crash 、 ANR和卡顿,能够满足日常需求,且不需要额外准备接收服务器。使用bugly可以收集到已发布应用的异常,以便测试和开发人员发现和修改bug,对于提高软件质量有着极大的帮助。

二.Android 平台bug类型及产生原因分析

Android系统架构图.png

  为了更好的理解后面的内容,首先让我们来了解一下Android的系统架构,从上图我们可以看到,Android分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和linux核心层。
  简单来说Android系统本质上通过底层精简的Linux系统来启动Android的Dalvik虚拟机,然后在这个虚拟机上跑Java应用,同时它封装了大量java和c++的API供外部调用。

  Android 平台bug类型主要有:Crash、ANR、卡顿、服务器异常等。

1,常见的Android Crash有两类:一类是Java Exception异常,一类是Native Signal异常。java代码导致jvm退出,弹出“程序已经崩溃”的对话框,最终用户点击关闭后进程退出。通过NDK,使用C/C++开发,导致进程收到错误信号,发生Crash,Android 5.0之前进程直接退出(闪退) , Android 5.0之后会弹“程序已崩溃”的对话框。
2,ANR全称是Application Not Responding,是指应用程序未响应。

  Android系统对于一些事件需要在一定的时间内完成,如果超过预定时间未响应或者响应时间过长,会造成ANR。一般这时系统会弹出一个ANR对话框,用户可自行选择继续等待或者停止当前程序运行。
  那么哪些场景会造成ANR呢?

3,卡顿:16ms原则。Android系统每隔16ms会发出VSYNC信号重绘界面(Activity)。

  为什么是16ms,因为Android设定的刷新频率是60FPS(Frame Per Second),也就是每秒60帧的刷新率,约合16ms刷新一次。
这就意味着,我们需要在16ms内完成下一次刷新的界面相关运算,以便界面更新。
哪些情况会导致卡顿?

4,服务器异常:使用Fiddler抓包工具。

  Fiddler是位于客户端和服务端的HTTP代理。它能够记录客户端的服务器之间的所有HTTP请求,可以针对特定的HTTP请求,分析请求数据、设置断点、调试web应用、修改请求的参数,甚至可以修改服务器返回的数据,功能非常强大。

引申——Android适配问题引起的bug

三.崩溃捕获原理

系统的默认处理
很抱歉,”营销管家”已停止运行。
Native崩溃捕获方式.png 信号的背后.png 崩溃背后的处理.png

  通过上图我们可以看到,当我们new Thread 然后start线程启动,这时候线程的状态是已经准备就绪但是并没有执行的状态。这时首先会在liunx C层面通过Pthread_Create()这个API创建一个线程,创建这个线程以后执行一遍interpThreadStart()方法,然后继续执行到dvmcallMethod()方法,这个方法里面通过JNI调用我们new出来的Thread里面的run方法。可以看到这整个过程都是在一个Pthread线程里面,整个线程栈被划分为两个部分,一个是c层的native栈,一个是java层的java栈。假设这个时候执行的java线程突然崩溃了,它会一层一层的往上抛异常,直到整个java栈一层一层退出,java栈退出之后会生成一个Pending Exception这样一个数据结构。接下来它就回到了dvmcallMethod里面,就结束了。结束之后理论上它就要把这个线程跟虚拟机解开来,解开以后这个线程就要退出了。当它解开的时候发现有一个Pending Exception存在,即有一个未捕获的异常存在,那么这个线程退出之前会调用uncaughtExceptionHandler方法,所有我们可以在这个回调方法里处理未捕获的异常情况。

四.移动端常用的bug收集方案

五.使用Bugly

看懂问题ISSUE.png BUGLY JAVA栈.png Bugly Native栈.png

六.Bugly存在误报和漏报吗?

七.关于移动应用Crash统计数据

整体崩溃率.png 崩溃机型.png Top崩溃.png

八.Android常见bug及解决方案总结

参考:Android常见bug及解决方案总结.doc

九.服务器异常获取

参考:Fiddler手机抓包工具使用详解.doc

十.DIY Android和iOS平台的崩溃捕获和收集器

参考:经典好文:android和iOS平台的崩溃捕获和收集 - wx0123 - 博客园.htm

上一篇下一篇

猜你喜欢

热点阅读