android调试——logcat详解

本文深入解析Logcat命令的全面使用技巧,包括基本命令、控制日志输出格式及查看备用日志缓冲区的方法,助你有效管理和分析Android应用日志。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

“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 SDK下, 如何在程序中输出日志 以及如何查看日志. 闲话少说,直接进入正题 在程序中输出日志, 使用 android.util.Log 类. 该类提供了若干静态方法 Log.v(String tag, String msg); Log.d(String tag, String msg); Log.i(String tag, String msg); Log.w(String tag, String msg); Log.e(String tag, String msg); 分别对应 Verbose, Debug, Info, Warning,Error. tag是一个标识,可以是任意字符串,通常可以使用类名+方法名, 主要是用来在查看日志时提供一个筛选条件. 程序运行后 并不会在 ide的控制台内输出任何信息. 如果要后查看日志 请使用 adb logcat 关于adb的更多信息请查看官方网站. 当执行 adb logcat 后会以tail方式实时显示出所有的日志信息. 这时候我们通常需要对信息进行过滤,来显示我们需要的信息, 这时候我们指定的 tag就派上了用场. adb logcat -s MyAndroid:I 这时将只显示tag为MyAndroid,级别为I或级别高于I(Warning,Error)的日志信息. 示例代码如下: Java代码 1. package com.zijun; 2. 3. import android.app.Activity; 4. import android.content.Context; 5. import android.graphics.Canvas; 6. import android.os.Bundle; 7. import android.util.Log; 8. import android.view.MotionEvent; 9. import android.view.View; 10. 11. public class MyAndroid extends Activity { 12. 13. protected static final String ACTIVITY_TAG="MyAndroid"; 14. 15. @Override 16. protected void onCreate(Bundle icicle) { 17. super.onCreate(icicle); 18. setContentView(new MyView(this)); 19. } 20. public class MyView extends View { 21. public MyView(Context c) { 22. super(c); 23. } 24. @Override 25. protected void onDraw(Canvas canvas) { 26. 27. } 28. @Override 29. public boolean onMotionEvent(MotionEvent event) { 30. Log.i(MyAndroid.ACTIVITY_TAG, "============================="); 31. 32. Log.d(MyAndroid.ACTIVITY_TAG, "Haha , this is a DEBUG of MyAndroid. "); 33. Log.i(MyAndroid.ACTIVITY_TAG, "Haha , this is a INFO of MyAndroid. "); 34. Log.w(MyAndroid.ACTIVITY_TAG, "Haha , this is a WARNING of MyAndroid. "); 35. 36. return true; 37. } 38.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值