在安卓应用的测试过程中,遇到 Crash 或者 ANR 后,想必大家都会通过 adb logcat 命令来抓取日志定位问题。如果直接使用 logcat 命令的话,默认抓取出的 log 文件包含安卓运行时产生的所有日志,给快速定位问题增加了时间成本。

这个问题可以通过一个简单的 Shell 脚本来解决,依然只有区区 20 行左右的代码。

脚本的编写思路是这样的:

1、通过 date 命令获取当前时间并赋值给变量 "DATE",格式为 "year/month/day/hour/minutes/second"。这个时间戳可以用来给输出的 log 文件命名,每次运行脚本都是不同的时间点,从而达到区分 log 文件的目的;

2、通过 read 命令读取包名;

3、通过 read 命令读取日志的优先级(V/D/I/W/E/F/S),通常,我们需要的是 E(Error)级别的日志,也就是应用运行时产生的错误信息;

4、运行 adb logcat 命令,将第 3 步中的优先级(priority)作为输入参数来过滤日志,缩小输出日志的大小和范围;

5、运行 adb logcat 命令,不添加筛选条件,输出全部日志以防万一(参考第 7 步);

6、Crash 的信息存在于 log 文件中,而 ANR 的问题则需要 traces 文件。通过 adb pull 命令可将手机中的 /data/anr/traces.txt 文件取出;

7、运行 adb logcat -c 命令。每次获取 log 文件后,清空日志,保持测试机日志环境的干净,方便下次遇到问题后的日志获取和问题定位。

以下为编写好的脚本:

#!/bin/bash
DATE=$(date "+%Y%m%d%H%M%S")
# 读取包名
echo -n "Please enter the package name:"
read package_name
# 日志级别:V/D/I/W/E/F/S
echo -n "Please enter the priority of log:"
read priority
# log命令
adb logcat -d -v long "AndroidRuntime:${priority}" "*:S" > ~/Desktop/logg/${package_name}${DATE}.log
adb logcat -d -v threadtime > ~/Desktop/logg/${package_name}${DATE}_all.log
# anr日志
adb pull /data/anr/traces.txt ~/Desktop/logg/
# 清空日志
adb logcat -c

运行示例:

-> ./grab_log.sh
Please enter the package name:com.baidu.minivideo
Please enter the priority of log:E
/data/anr/traces.txt: 1 file pulled.

欢迎关注微信公众号“测试开发Stack”,更多原创文章第一时间发布!

Shell脚本 | 抓取log文件的更多相关文章

  1. shell脚本抓取网页信息

    利用shell脚本分析网站数据 # define url time=$(date +%F) mtime=$(date +%T) file=/abc/shell/abc/abc_$time.log ht ...

  2. 遇到Audio/Speech相关问题,如何抓取log

      [DESCRIPTION] 遇到Audio/Speech相关问题时,经常需要抓取相关log信息,总结抓取方法如下 [SOLUTION] 1.    通话声音相关的问题: Case 1: 通话中某一 ...

  3. 如何用adb抓取log?

    在Androidclient的測试过程中,有时候我们会遇到闪退等异常情况. 这时我们能够通过adb抓取log.从而给开发提供很多其它信息. 一.下载ADB.exe     在网上搜索"adb ...

  4. 怎样用adb抓取log?

    在Android客户端的测试过程中,有时候我们会遇到闪退等异常情况.这时我们可以通过adb抓取log,从而给开发提供更多信息. 一.下载ADB.exe     在网上搜索“adb工具包”就可以找到很多 ...

  5. [ Shell ] 通过 Shell 脚本导出 GDSII/OASIS 文件

    https://www.cnblogs.com/yeungchie/ 常见的集成电路版图数据库文件格式有 GDSII 和 OASIS,virtuoso 提供了下面两个工具用来在 Shell 中导出版图 ...

  6. 如何使用shell脚本快速排序和去重文件数据

    前面写过一篇通过shell脚本去重10G数据的文章,见<用几条shell命令快速去重10G数据>.然而今天又碰到另外一个业务,业务复杂度比上次的单纯去重要复杂很多.找了很久没有找到相应的办 ...

  7. Centos7下crontab+shell脚本定期自动删除文件

    问题描述: 最近有个需求,就是rsync每次同步的数据量很多,但是需要保留的数据库bak文件 保留7天就够了,所以需要自动清理文件夹内的bak文件 解决方案: 利用shell脚本来定期删除文件夹内的任 ...

  8. Android 抓取LOG的几种命令【转】

    通常调试时候需要抓取log信息,下面几种通过ADB命令来抓取log的方法: USB连接上手机,手机需要其他操作:然后运行ADB工具:输入不同的命令即可抓取对应的LOG信息. 抓取radio LOG信息 ...

  9. 在Scrapy项目【内外】使用scrapy shell命令抓取 某网站首页的初步情况

    Windows 10家庭中文版,Python 3.6.3,Scrapy 1.5.0, 时隔一月,再次玩Scrapy项目,希望这次可以玩的更进一步. 本文展示使用在 Scrapy项目内.项目外scrap ...

随机推荐

  1. Async Return Types

    Async methods have three possible return types: Task<TResult>, Task, and void. The Task<TRe ...

  2. Hdu3829 Cat VS Dog(最大独立点集)

    Cat VS Dog Problem Description The zoo have N cats and M dogs, today there are P children visiting t ...

  3. vc6中向vs2010迁移的几个问题

    vc6版本支持的库编译:CJ60lib 1. 用vs2010打开CJ60库的源码的dsw,强制打开 (1)设置项目属性的语言 因为,如果代码字符的编码集不一样,则会出现函数冲定义,参数冲突等问题,这可 ...

  4. hdu 3910 Liang Guo Sha

    题目链接:hdu 3910 Liang Guo Sha 题目大意:Alice和Bob这两个小伙伴又发明了一种新游戏, 叫两国杀, 每个人手上有两张牌,“杀” 和“闪”, 然后有三个数值A,B和C, 当 ...

  5. cxgrid动态多表头

    function TForm15.CreateBand(View: TcxGridDBBandedTableView;  BandCaption, ParentBandCaption: String) ...

  6. mssql借助链接服务器进行数据快速迁移

    在工作中,遇到了一个任务,需要将A数据库的数据迁移到B数据库,两个数据库的数据结构是一样的.B数据库已经在相当数量的数据了,故而不能通过复制数据库的方式来实现.  旧方法 在对数据迁移的时候,一开始使 ...

  7. python 使用json格式转换

    什么是json: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析和生成.它基于JavaScript Programm ...

  8. WPF放大镜效果

    在做WPF项目中,不止两个项目需要有放大镜功能. 第一个项目是一个手术室的远程示教系统,主要是为了方便专家演示病症时,可以放大图片上的某些部位. 第二个项目是一个工厂的MES项目,其中有个功能是质量预 ...

  9. Linux下查看文档指令

    1,cat直接查看 cat /etc/profile 2,more,less分页查看 less  /etc/profile more /etc/profile less -N /etc/profile ...

  10. [JavaScript] 跳出循环方法总结

    1.forEach() 方法对数组的每个元素执行一次提供的函数.但是没有办法中止或者跳出 forEach 循环,除了抛出一个异常,该方法没有返回值,return/return false/return ...