android调试——logcat详解

Posted 一代小强

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android调试——logcat详解相关的知识,希望对你有一定的参考价值。

“logcat到底怎么用才爽? 为此,我决定好好研究一下“

1、基本命令

logcat的格式如下


logcat [options] [filterspecs]

比如需要过滤TAG是 “demo” 的log


logcat -s demo

全部命令选项如下

选项说明
-s相当于过滤器表达式 '*:S'
例如:logcat -s demo
-f <file>--file=<file>
设置logcat 内容保存的位置,默认是stdout
例如: logcat -f sdcard/log.txt
-r <kbytes>--rotate-kbytes=<kbytes>
每输出 <kbytes> 时轮替日志文件,默认是16
例如:logcat -f sdcard/log.txt -r 1
-b <buffer>加载可供查看的备用日志缓冲区,例如 eventsradio
默认使用 mainsystemcrash 缓冲区集。
-c--clear
清除(清空)所选的缓冲区并退出。
默认缓冲区集为 mainsystemcrash
要清除所有缓冲区,请使用 -b all -c
-e <expr>--regex=<expr>
只输出日志消息与 <expr> 匹配的行,其中 <expr> 是一个正则表达式。
-m --max-count=<count>
输出 `` 行后退出。这样是为了与 --regex 配对,但可以独立运行。
--pid=<pid> ...仅输出来自给定 PID 的日志。
例如:logcat --pid=4355
-D–dividers
输出各个日志缓冲区之间的分隔线。
-t <time>输出自指定时间以来的最新行。此选项包括 -d 功能。
例如:adb logcat -t ‘01-26 20:52:41.820’
-v <format>设置日志消息的输出格式。默认格式为 threadtime
-g输出指定日志缓冲区的大小并退出。
-G <size>--buffer-size=<size>
设置log缓冲区的大小,后缀可以是K或者M
例如:logcat -G 2M
-S--statistics
在输出中包含统计信息,以识别和定位日志垃圾信息发送者。(注意,S是大写的)
-c清空(清除)整个日志并退出。
-t <count>仅输出最新的行数。此选项包括 -d 功能。
-t <time>输出自指定时间以来的最新行。此选项包括 -d 功能。
例如:adb logcat -t ‘01-26 20:52:41.820’

2、控制日志输出格式

可以修改log输出格式,来显示特定的元数据字段,您可以用-v 选项,并指定一下某一受支持的输出格式。

  • brief:显示优先级、标记以及发出消息的进程的 PID。
  • long:显示所有元数据字段,并使用空白行分隔消息。
  • process:仅显示 PID。
  • raw:显示不包含其他元数据字段的原始日志消息。
  • tag:仅显示优先级和标记。
  • thread::旧版格式,显示优先级、PID 以及发出消息的线程的 TID。
  • threadtime(默认值):显示日期、调用时间、优先级、标记、PID 以及发出消息的线程的 TID。
  • time:显示日期、调用时间、优先级、标记以及发出消息的进程的 PID。

例如:


adb logcat -v time
adb logcat -v time -v tag // 可以指定多字段
 

您可以通过在命令行中输入 logcat -v --help 获取格式修饰符详细信息。

  • color:使用不同的颜色来显示每个优先级。
  • descriptive:显示日志缓冲区事件说明。此修饰符仅影响事件日志缓冲区消息,不会对其他非二进制文件缓冲区产生任何影响。事件说明取自 event-log-tags 数据库。
  • epoch:显示自 1970 年 1 月 1 日以来的时间(以秒为单位)。
  • monotonic:显示自上次启动以来的时间(以 CPU 秒为单位)。
  • printable:确保所有二进制日志记录内容都进行了转义。
  • uid:如果访问控制允许,则显示 UID 或记录的进程的 android ID。
  • usec:显示精确到微秒的时间。
  • UTC:显示 UTC 时间。
  • year:将年份添加到显示的时间。
  • zone:将本地时区添加到显示的时间。

3、查看备用日志缓冲区

Android 日志记录系统为日志消息保留了多个环形缓冲区,而且并非所有的日志消息都会发送到默认的环形缓冲区。要查看其他日志消息,您可以使用 -b 选项运行 logcat 命令,以请求查看备用的环形缓冲区。您可以查看下列任意备用缓冲区:

  • radio:查看包含无线装置/电话相关消息的缓冲区。
  • events:查看已经过解译的二进制系统事件缓冲区消息。
  • main:查看主日志缓冲区(默认),不包含系统和崩溃日志消息。
  • system:查看系统日志缓冲区(默认)。
  • crash:查看崩溃日志缓冲区(默认)。
  • all:查看所有缓冲区。
  • default:报告 mainsystemcrash 缓冲区。

例如:


adb logcat -b crash // 查看crash 缓冲区

后记

把logcat仔细研究一番,发现还是有挺多实用的技巧,比如,有时候会遇到logcat报如下问题:


logcat read unexpected eof
  

实际上是缓冲区不足导致的,如过有看过上面的参数,马上就知道对应的解决方案了——修改缓冲区大小就能解决

对应参数是-G

所以,我们还是很有必要好好研究平常常用到的命名,温故知新。

以上是关于android调试——logcat详解的主要内容,如果未能解决你的问题,请参考以下文章

Android - 设置 logcat 消息的最大长度

Android调试工具DDMS的使用详解

Android调试工具DDMS的使用详解

在 android studio 中使用设备调试时,Android Logcat 为空

如何使用android中的logcat调试程序

Android WiFi 调试 -> Logcat