一. Log 日志中 Bug 类型

  1. 程序异常强制关闭: Force Close ,Fatal
  2. 程序无响应: Application Not Response , ANR(应用无响应)。一般是主线程超时无响应造成的。
    • ANR 类型有:

      • keyDispatchTimeout(Activity):5秒无响应

        • 位于 ActivityManagerService.java 类中

          // How long we wait until we timeout on key dispatching.

          static final int KEY_DISPATCHING_TIMEOUT = 5*1000;

      • BroadcaseTimeout(Receiver):10秒无响应

      • ServiceTimeout(Service):20秒无响应

    • ANR 产生原因:
      • UI 线程做了耗时操作。比如在 Activity 中做了超过 5 秒无响应的耗时操作,比如文件读写,数据库读写,就会出现 ANR
    • ANR 避免:
      • 不要在 UI 线程做耗时操作。

一. log 日志文件的位置

  • 可以通过在 application 中实现接口: UncaughtExceptionHandler, 在实现的 ·uncaughtException()· 方法中把产生的 log 保存到本地。

二. log 日志文件的结构

三. log 日志中 bug 的查找和分析

  1. 日志文件关键字

    • Force CloseFatal
    • Application Not Response : ANR
  2. 查看 Log 基本步骤

    1. 如果是 ANR问题,在日志文件中搜索ANR,快速定位到关键事件信息。
    2. 如果是Force Close或其他异常退出,搜索FATAL,快速定位到关键事件信息。
    3. 定位到关键事件信息后,查看信息是否明确,如何不明确的话,查看具体的进程和线程跟踪的日志,来定位 bug
  3. Force Close 快速定位案例

    • 出现了 Force Close 的情况,搜索关键字 FATAL,得到以下 Log

        	10-18 14:36:35.197 16078 16078 E AndroidRuntime: FATAL EXCEPTION: main
      
        	10-18 14:36:35.197 16078 16078 E AndroidRuntime: Process: cc.lijingbo.crashhandler, PID: 16078
      
        	10-18 14:36:35.197 16078 16078 E AndroidRuntime: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.CharSequence android.widget.TextView.getText()' on a null object reference
      
        	10-18 14:36:35.197 16078 16078 E AndroidRuntime: 	at cc.lijingbo.crashhandler.MainActivity$1.onClick(MainActivity.java:23)
      
        	10-18 14:36:35.197 16078 16078 E AndroidRuntime: 	at android.view.View.performClick(View.java:5232)
      
        	10-18 14:36:35.197 16078 16078 E AndroidRuntime: 	at android.view.View$PerformClick.run(View.java:21289)
      
        	10-18 14:36:35.197 16078 16078 E AndroidRuntime: 	at android.os.Handler.handleCallback(Handler.java:739)
      
        	10-18 14:36:35.197 16078 16078 E AndroidRuntime: 	at android.os.Handler.dispatchMessage(Handler.java:95)
      
        	10-18 14:36:35.197 16078 16078 E AndroidRuntime: 	at android.os.Looper.loop(Looper.java:168)
      
        	10-18 14:36:35.197 16078 16078 E AndroidRuntime: 	at android.app.ActivityThread.main(ActivityThread.java:5885)
      
        	10-18 14:36:35.197 16078 16078 E AndroidRuntime: 	at java.lang.reflect.Method.invoke(Native Method)
      
        	10-18 14:36:35.197 16078 16078 E AndroidRuntime: 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:797)
      
        	10-18 14:36:35.197 16078 16078 E AndroidRuntime: 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:687)
      
        	10-18 14:36:35.207  1187 17570 E ActivityManager: App crashed! Process: cc.lijingbo.crashhandler
      
        	10-18 14:36:35.207  1187 17570 W ActivityManager:   Force finishing activity cc.lijingbo.crashhandler/.MainActivity
    • 看到因为 NullPointerException 造成的。

      java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.CharSequence android.widget.TextView.getText()' on a null object reference

    • 然后下一句提示项目的代码出错的地方: at cc.lijingbo.crashhandler.MainActivity$1.onClick(MainActivity.java:23),在 MainActivityonClick 方法的第23

    • 源码

      public class MainActivity extends AppCompatActivity {

        	private TextView tv1;
      private TextView tv2; @Override
      protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      tv1 = (TextView) findViewById(R.id.tv1);
      tv1.setOnClickListener(new OnClickListener() {
      @Override
      public void onClick(View v) {
      Toast.makeText(MainActivity.this, tv2.getText().toString(), Toast.LENGTH_SHORT).show();
      }
      });
      }
      }
    • 可以看到是因为使用 Toast 的时候,tv2 没有初始化,造成的空指针,把 tv2 初始化就可以了。

  4. ANR 快速定位案例

四. adb logcat 的学习和使用

  • 抓取设备中日志到指定目录

    • adb logcat >crash.log

参考:

Logcat 官网语法: https://developer.android.google.cn/studio/command-line/logcat.html#Syntax

Logcat 的使用:https://developer.android.google.cn/studio/debug/am-logcat.html

Analyze a Stack Trace: https://developer.android.google.cn/studio/debug/stacktraces.html

studio debug: https://developer.android.google.cn/studio/debug/index.html

如何分析解决 ANR : http://blog.csdn.net/dadoneo/article/details/8270107

Android log 日志分析的更多相关文章

  1. (转)DB2 db2diag.log 日志分析

    DB2 db2diag.log 日志分析 原文:http://blog.csdn.net/lyjiau/article/details/52129997 db2diag.log是用来记录DB2数据库运 ...

  2. [日志分析] Access Log 日志分析

    0x00.前言: 如何知道自己所在的公司或单位是否被入侵了?是没人来“黑”,还是因自身感知能力不足,暂时还没发现?入侵检测是每个安全运维人员都要面临的严峻挑战.安全无小事,一旦入侵成功,后果不堪设想. ...

  3. Android Log日志文件的分析、查看

    Log 在android中的地位非常重要,要是作为一个android程序员不能过分析log这关,算是android没有入门吧 . 下面我们就来说说如何处理log文件 什么时候会产生log文件呢 ?一般 ...

  4. Android log日志

    LOG是用来记录程序执行过程的机制,它既可以用于程序调试,也可以用于产品运营中的事件记录.在Android系统中,提供了简单.便利的LOG机制,开发人员可以方便地使用. androidsdk中提供了l ...

  5. 27、android log日志

    一.记住 加写sd卡权限 二.代码 package com.example.logtest; import java.io.File; import java.io.IOException; impo ...

  6. nginx acces.log日志分析

    1,统计各访问IP的总数 awk '{if($9>0 && $9==200 && substr($6,2)== "GET") a[$1]++} ...

  7. Android ANR从原理到日志分析,记下来就够了

    站在巨人的肩膀上可以看的更远 做一个优秀的搬运工 Android 彻底理解安卓应用无响应机制 Android ANR日志分析全面解析 优秀的文章不可独享,要扩散,要做好笔记,哈 <沁园春长沙&g ...

  8. Android Native/Tombstone Crash Log 详细分析(转)

    转自:http://weibo.com/p/230418702c2db50102vc2h Android 虽然已经有好几年了,但是NDK的开放速度却非常缓慢,所以目前网络上针对对Android Nat ...

  9. Android输出日志Log类并保存到文件中

    android.util.Log常用的方法有以下5个: Log.v() Log.d() Log.i() Log.w() 以及 Log.e().根据首字母分别对应VERBOSE,DEBUG,INFO,W ...

随机推荐

  1. Webview跨域访问风险

    漏洞原理:WebView对象的行为是通过WebSettings类进行设置的,如果配置不当,攻击者就可以利用该漏洞可以打破Android沙盒隔离机制,从而通过某个应用来攻击其它应用,盗取其它应用本地保存 ...

  2. ES6学习笔记一:let、const、解构赋值

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/7236342.html 感谢阮一峰老师的无私奉献,开源推动世界!教程地址:http://es6.ruanyife ...

  3. ODI调用WebService---->OdiInvokeWebService

    ODI 提供了OdiInvokeWebService调用第三方WebService,可以在package和过程中使用. 一.准备测试用WebService 天气预报Web服务,数据来源于中国气象局公用 ...

  4. 〖Linux〗Linux高级编程 - 进程间通信(Interprocess Communication)

    [转自: http://blog.csdn.net/Paradise_for_why/article/details/5550619] 这一章就是著名的IPC,这个东西实际的作用和它的名字一样普及.例 ...

  5. ADAMS与外部程序通信(Adams Command Server)

    The Adams Command Server is an Adams View (or Adams Car) component that manages communication betwee ...

  6. excel主题使文档更加具有专业化

    如上图所示,表格或图表有很多的配色方案. 1.每个主题,会有一套配色方案,而且这些配色方案相对来讲都是比较协调统一的, 2.页面布局----主题,选择好主题之后再套用配色方案

  7. 【php+js】用PHP或者JS怎么显示搜索到的关键字高亮,及其文章里包含关键字的一小段

    1.想要实现的效果: 2.思路:小数据量使用 php的正则替换,即[preg_replace()]函数 -->> 支持多个关键词高亮显示,中间参数1和参数2放入对应的数组即可. $titl ...

  8. Heroku免费版限制

    SLEEPS AFTER 30 MINS OF INACTIVITY   30分钟无人访问就休眠 Verified accounts come with a monthly pool of 1000 ...

  9. CASE WHEN 及 SELECT CASE WHEN的用法(写了一坨烂代码发现两条sql就行了, 哎)

    转自:http://blog.sina.com.cn/s/blog_4c538f6c01012mzt.html Case具有两种格式.简单Case函数和Case搜索函数. 简单Case函数 CASE  ...

  10. Http网络协议

    目录结构: contents structure [-] 什么是HTTP协议 Http协议的发展历史 Http的报文结构 客户端请求 服务端响应消息 Content-Type application/ ...