【adb】- logcat使用

作者: 拔萝卜占坑 | 来源:发表于2020-04-30 20:00 被阅读0次

    简介

    ADB,即 Android Debug Bridge,它是 Android 开发/测试人员不可替代的强大工具。

    对于开发人员来说,Android Studio已经提供了强大的日志查看,过滤等功能。那为什么我们还要了解logcat这个命令呢?

    在有些情况下,电脑没有安装开发工具,或者调试一些小问题的时候,我们只需要查看一条简单的日志就能够确定问题所在,那么这个时候,使用logcat会节省很多时间。

    在比如,测试一般不会安装Android开发工具,如果不了解logcat,就很难快速定位问题,对于有些功能不能做更加精确的测试。

    参考

    awesome-adb

    日志工具

    • Android Studio
      Android开发工具,自带强大的日志查看工具。
    • DDMS
      Android SDK下tools文件夹下的一个工具,不需要安装Android Studio,但是需要安装Java Sdk,DDMS同样具备强大的日志等功能,在命令行执行“monitor”可执行程序,可以打开。
    • adb logcat
      adb是Android SDK中platform-tools文件夹下的一个工具,路径是:“/sdk/platform-tools/adb”。使用这种方式比上面简单很多,只需要电脑上有“adb”可执行文件,然后使用adb命令即可。adb文件下载链接:密码:xxx1 ,如果下载失效,找你们的研发要一个即可。

    adb logcat

    • 格式:[adb] logcat [<option>] ... [<filter-spec>] ...
      如果提示no matches found:*:W之类错误,请给参数加上引号。
    Android 的日志分为如下几个优先级(priority):
    • V —— Verbose(最低,输出得最多)
    • D —— Debug
    • I —— Info
    • W —— Warning
    • E —— Error
    • F —— Fatal
    • S —— Silent(最高,啥也不输出)
    按级别过滤日志

    将该级别及以上的日志输出,例如:

    • adb logcat *:W
      1. *:作为tag参数,这里指所以的tag
      2. W:作为优先级(priority)参数

    即:adb logcat <tag>[:priority]。上面命令会将 Warning、Error、Fatal 和 Silent 日志输出。

    按 tag 和级别过滤日志

    <filter-spec> 可以由多个 <tag>[:priority] 组成。如果我们只想打印某tag的日志,那么可以像下面这样写:

    • adb logcat StudyTaskCountDownTime:V *:S

      1. StudyTaskCountDownTime:V
        • 打印tag为StudyTaskCountDownTime,日志级别为V及以上的日志。
        • 打印其它tag所以级别的日志
      2. *:S
        • 打印所以tag的S级别的日志(视无日志打印)

      那么StudyTaskCountDownTime:V 和 *:S合并起来就是:只打印tag为StudyTaskCountDownTime,日志级别为V及以上的日志。

    日志格式

    adb logcat -v <format>

    brief(默认)
      <priority>/<tag>(<pid>): <message>
    process
      <priority>(<pid>) <message>
    tag
      <priority>/<tag>: <message>
    raw
      <message>
    time
      <datetime> <priority>/<tag>(<pid>): <message>
    threadtime
      <datetime> <pid> <tid> <priority> <tag>: <message>
    long
      [ <datetime> <pid>:<tid> <priority>/<tag> ]
    <message>
    

    例如:adb logcat -v long ActivityManager:I *:S

    清空日志
    • adb logcat -c
    内核日志
    • adb shell dmesg
      非root设备执行报权限拒绝。

    adb logcat |grep

    grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为 -,则 grep 指令会从标准输入设备读取数据。

    参考grep

    • 语法
      grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][--help][范本样式][文件或目录...]
      

    管道(|)和grep结合,打印一行中包含某字符串的日志,例如:

    adb logcat | grep StudyTaskCountDownTime
    

    一行中包含了StudyTaskCountDownTime字符串的日志,加“-i”可以忽略大小写。grep支持正则表达式,可以写出更高级的过滤规则。

    设置匹配字符串颜色
    • adb logcat | grep --color=auto -i StudyTaskCountDownTime,--color取值有:never、always、auto。always和auto。
    显示同一个进程的所有输出
    • adb logcat | grep –color=auto pid
    清缓存并执行

    logcat 有缓存,如果仅需要查看当前开始的 log,需要清空之前的。

    • adb logcat -c && adb logcat
    过滤 log 文件

    有时需要分析 log 文件,过滤 log 文件还是使用 grep。例如 log 文件为 myapp.log,要匹配 tag 为 MyApp 和 MyActivity 的输出,然后输出到 newmyapp.log:

       cat myapp.log | grep "^..MyApp\|^..MyActivity" > newmyapp.log
    

    "^..MyApp\ | ^..MyActivity"根据tag在一行中的位置,通过正则表达式来匹配的,所以要更加自己的需要书写。

    相关文章

      网友评论

        本文标题:【adb】- logcat使用

        本文链接:https://www.haomeiwen.com/subject/zwrtghtx.html