阅读 1234

Android-Crash日志抓取

Crash简介

crash,即崩溃,anr是crash的一种。在程序中可能会出现你未捕获到的异常,这就造成了崩溃。

常见导致Crash的异常

  • NullPointerException 空指针
  • ClassCastException 类型转换异常
  • IndexOutOfBoundsException 下标越界异常
  • ActivityNotFoundException Activity未找到异常
  • IllegalStateException 非法状态异常
  • ArrayIndexOutOfBoundsException 数组越界异常
  • SecurityException 安全异常

抓取Android APP崩溃和无响应日志

在Android APP的测试过程中经常遇到crash和anr,开发人员习惯通过eclipse或者eclipse的ddms组件进行捕抓日志,测试人员常通过在dos窗口下adb命令的方式来抓取日志。前者的缺点是启动时非常耗时,后者呢则每次都要写命令也比较麻烦(需要截图时也存在这个问题)。

针对这样的情况,下面分享一个通过adb程序与bat命令组合的技巧来抓取日志,只要3~5秒即可获取崩溃日志,非常快捷。

一、 准备工作

1.1 安装JDK和ADB(V1.0.31版本或以上),网上很多指导方法可以参考。

1.2 在PATH环境变量中添加ADB路径。这样就能在任意地方调用ADB命令,如adb.exe的位置在c:\adb\adb.exe,则在path中加入c:\adb。

二、 制作捕获日志的批命令

2.1 制作捕获crash异常的批命令
将以下命令复制,制作成logcat.bat文件。logcat.bat可以放置任意位置。

@ECHO OFF
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
SET timeStamp=%dt:~0,4%-%dt:~4,2%-%dt:~6,2%_%dt:~8,2%-%dt:~10,2%-%dt:~12,2%
SET mutID=_mut
@ECHO ON
adb logcat -v time > .\"%mutID%_%timeStamp%_logcat.log"
pause
复制代码

原理: 该工具的原理是bat文件调用adb工具,将手机运行日志拉到本地,并将实时日志也记录到本地。

用法: 当手机需要重现crash、或者x分钟内已经发生过crash(x≈15~30),点击此bat,logcat命令会将手机的logcat日志拉下来并实时记录,直到你关闭cmd窗口。然后在拉下来的txt中寻找fatal字眼,附近上下文即为crash日志。

2.2 制作捕获ANR异常的批命令

anr:Application Not Responding -- 程序无响应。

将以下命令复制,制作成“ANR捕获.bat”文件。“ANR捕获.bat”可以放置任意位置。

@ECHO OFF
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
SET timeStamp=%dt:~0,4%-%dt:~4,2%-%dt:~6,2%_%dt:~8,2%-%dt:~10,2%-%dt:~12,2%
SET mutID=_mut
@ECHO ON
adb pull data/anr/traces.txt traces_%timeStamp%.txt
复制代码

原理: 同上,将手机的traces.txt拉到本地。手机发生anr之后可以用,但一般用不上。

2.3 优点与限制

手机无需root;
无需eclipse支持;
方便保存、查找日志;
实时日志不能在cmd窗口回显(限制)

三、演示

以抓取crash异常为例:

步骤1:将android手机连接电脑,开启开发者模式并允许usb调试;
步骤2:运行logcat.bat文件,会出现cmd窗口;
步骤3:①如果手机程序已经发生过crash,5秒后关闭cmd窗口;②如果是想重现crash,则在手机端重现后即可关闭cmd窗口;
步骤4:在logcat.bat的同级目录下会生成一份log文件,从文件中搜查FATAL关键字,便可找到崩溃代码。

说明: bat是dos下的批处理文件。批处理文件是无格式的文本文件,它包含一条或多条命令。它的文件扩展名为 .bat 或 .cmd。在命令提示下键入批处理文件的名称,或者双击该批处理文件,系统就会调用Cmd.exe按照该文件中各个命令出现的顺序来逐个运行它们。直接右键-新建-文本(.txt文件) 右键重名名 改后缀为 .bat直接点击运行,或者 在cmd下运行。

shell脚本和批处理,通常是Linux和Windows下进行一些简单脚本执行任务的途径。shell脚本是Linux、unix和Mac等下,批处理是Windows下。因此上述的bat文件只可在Windows上执行,如需在mac上执行,需使用shell脚本语言。