IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 终端中查看某个app的logcat输出,支持关键字筛选,支持输出到文件 -> 正文阅读

[移动开发]终端中查看某个app的logcat输出,支持关键字筛选,支持输出到文件


在只安装了adb环境的情况下,如何查看某个app的日志,同时筛选关键字?

如何配置adb环境,请移步mac下安装adb环境的三种方式

通过adb在终端中输出app的实时log

Logcat命令行工具

Logcat 是一个命令行工具,用于转储系统消息日志,包括设备抛出错误时的堆栈轨迹,以及从您的应用使用 Log 类写入的消息。

在 Android Studio 中,您也可以从 Logcat 窗口查看日志消息。这里我们通过Logcat命令行工具来查看app输出的log。

连接设备

先将设备通过usb数据线连接到电脑,通过adb devices命令查看是否连接成功:

 $ adb devices
List of devices attached
e253ab4c	device

可以看到我的手机已经连接到adb了。

查看设备的所有logcat输出

在终端中输入adb logcat,即可以看到设备的所有logcat输出:

adb logcat -d

不过这明显不是我们想要的,我们需要的是某个app下的logcat输出,Logcat命令行工具中提供了相应的方式:

在这里插入图片描述

adb logcat -d --pid=xxx

这里的xxx表示我们目标app对应的pid

获取某个app的pid:

如何获取某个app对应的pid呢?

通过adb shell dumpsys 包名

可以通过adb shell dumpsys 包名获取pid,不过需要我们在手机上先打开这个app,因为pid是分配给进程的,进程启动以后才会分配pid。

$ adb shell dumpsys meminfo com.tinytongtong.androidstudy
Applications Memory Usage (in Kilobytes):
Uptime: 96780621 Realtime: 118699597

** MEMINFO in pid 7948 [com.tinytongtong.androidstudy] **
                   Pss  Private  Private  SwapPss     Heap     Heap     Heap
                 Total    Dirty    Clean    Dirty     Size    Alloc     Free
                ------   ------   ------   ------   ------   ------   ------
  Native Heap    13692    13608       20       29    22528    20066     2461
  Dalvik Heap     2645     2584       28       19    15183     2895    12288
 Dalvik Other     2272     2260       12        0
        Stack       60       60        0        0
       Ashmem      166      164        0        0
      Gfx dev      780      780        0        0
    Other dev       34        0       32        0
     .so mmap     9038       68     4892        4
    .jar mmap     5295        0     2344        0
    .apk mmap    22072      192    18124        0
    .ttf mmap     3043        0     1832        0
    .dex mmap    15582       20    14636        0
    .oat mmap       94        0       20        0
    .art mmap     6384     5888      128       18
   Other mmap     1631       68     1352        0
   EGL mtrack    30624    30624        0        0
    GL mtrack     6068     6068        0        0
      Unknown     1814     1760       20        1
        TOTAL   121365    64144    43440       71    37711    22961    14749

 App Summary
                       Pss(KB)
                        ------
           Java Heap:     8600
         Native Heap:    13608
                Code:    42128
               Stack:       60
            Graphics:    37472
       Private Other:     5716
              System:    13781

               TOTAL:   121365       TOTAL SWAP PSS:       71

 Objects
               Views:       45         ViewRootImpl:        1
         AppContexts:        5           Activities:        1
              Assets:       15        AssetManagers:        0
       Local Binders:       32        Proxy Binders:       43
       Parcel memory:       11         Parcel count:       42
    Death Recipients:        4      OpenSSL Sockets:        1
            WebViews:        0

 SQL
         MEMORY_USED:      511
  PAGECACHE_OVERFLOW:       75          MALLOC_SIZE:      117

 DATABASES
      pgsz     dbsz   Lookaside(b)          cache  Dbname
         4       32             22         0/23/2  /data/user/0/com.tinytongtong.androidstudy/databases/dokit-database
         4       12                         0/0/0    (attached) temp
         4       32             40         2/14/2  /data/user/0/com.tinytongtong.androidstudy/databases/dokit-database (2)
         4       32             40         1/15/2  /data/user/0/com.tinytongtong.androidstudy/databases/dokit-database (3)

在最上面的输出中,我们也可以很方便的看到pid:

MEMINFO in pid 7948

需要注意的是,pid是分配给进程的,如果app关闭了再重新打开,就会分配一个新的进程,同一个包名对应的pid就会变

通过adb shell dumpsys activity top | grep "ACTIVITY" -A 0

除了上面的方式,我们还有另一种方式,也需要app处于打开状态:

¥ adb shell dumpsys activity top | grep "ACTIVITY" -A 0
  ACTIVITY com.bbk.launcher2/.Launcher 2afc762 pid=3207
  ACTIVITY com.tinytongtong.androidstudy/.MainActivity 45d30ec pid=7948

可以清晰的看到我们目标包名com.tinytongtong.androidstudy的pid为7948

输出单个app的log:adb logcat -d --pid=xxx

接着使用我们获取到的pid,就可以输出目标app下的log了:

adb logcat -d --pid=7948

这里输出的logcat是app下所有的log,如果我们要定位具体问题还是远远不够的,还需要支持关键字筛选。

删选关键字:grep

接着我们借助grep命令进行筛选,比如说我要搜索的关键字是"Lifecycle":

$ adb logcat -d --pid=7948 | grep "Lifecycle"
09-23 12:49:09.169  7948  7948 E LifecycleAActivity: onCreate
09-23 12:49:09.195  7948  7948 E LifecycleAActivity: onStart
...

可以看到这里只输出了符合我关键字的log,任务基本完成。

输出到对应的文件中: xxx命令 > target.txt

当然了,如果想把输出结果保存到文件中,也是很方便的,在之前的命令后面添加> logcat.txt,之前命令的输出结果就会被重定向到logcat.txt文件中。

adb logcat --pid=7948 -d | grep "Lifecycle" > logcat.txt

我们查看通过cat logcat.txt即可快速查看logcat.txt中的内容。

cat logcat.txt

这里的>表示覆盖文件内容,如果要追加文件末尾,可以换成>>

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-09-24 10:40:21  更:2021-09-24 10:44:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 20:03:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码