在Android开发中,无论是app还是system的开发,logcat都是debug所必须的。本文整理了一下logcat的日常用法和最常用的Debug技巧。本文的目的不在于大而全,定位差不多是一个快速使用手册。
常用adb命令
执行完logcat之后,输出往往是一大坨,眼花缭乱的,新手可能看不懂:
其实知道logcat输出的格式之后,就可以很简单的读懂了:
以上输出的信息包含了如下格式的内容:
- PID: Process ID, 即进程id, 可以看成app运行时,在系统中的唯一的一个标识
- TID: Thread ID, 即线程ID, 因为一个进程可以包含多个线程,而同一个进程内的各个线程是资源共享的,所以TID也比较重要
- Log级别: 常用的5个分别是 V(Verbose 明细,最低级别)、D(Debug 调试)、I(Info 信息)、W(Warn 警告)、E(Error 错误)
- TAG:开发中,标记Log的一个标志。Developer添加Log的时候,其实写什么样的TAG都可以,主要是为了通过这个TAG告诉自己大概发生了什么。比如,如果TAG使用类名,就可以知道输出LOG是哪个类。你也可以写任意其他的,比如写自己的名字,表示是自己刚刚添加的Log。这里一般都是类名或者app的名字。
- Log内容:记载Log的具体内容,输出的内容是什么是由代码里对应的Log语句决定的。eg:
以如下log为例:
就可以这样去解读:
kernel 顾名思义就是内核,在系统开发中会涉及到内核的bug,此时需要调取kernel log。kernel的log不是由logcat去抓,logcat只能抓取user space的log。可以用如下命令抓取kernel log:
我们学习的logcat就是抓user space bug的。我的习惯是直接导出所有的log,但看了网上的资料,也有很多人根据不同日志的分类去导出log,提高debug效率
这个分类的日志主要适用于RIL(Radio Interface Layer)开发的人员,比如日常生活最重要的移动数据上网、通话、短信等均属于 radio 的研发。抓取 radio 日志的方法为:
event 的日志包含了对于手机基本操作的记录,如打开/关闭一个软件、按下返回键、打开/关闭通知栏等等,抓取方法:
main 日志是开发软件中最常用到的日志了,在这里你可以看到应用崩溃的具体原因、调试的时候通过 所打印出来的日志,抓取方法:
简要说明:
这个有个需要注意的地方:
对于可执行程序及动态库,一般在LINKED子目录中是带有符号的库(没有经过符号剥离),如果可执行文件中没有包括调试符号,您将获得??:0 作为响应。
1、首先需要一个重要的脚本文件:
将以上文件保存hy.panic.py
2、相关的死机堆栈信息保存 error.txt
例如:
3、将以上两个文件拷贝到android的编译根路径下面,执行
python hy.panic.py error.txt
方法2使用非常方便,相比于加打印效率大大提高。非常感谢提供脚本的同学。
- Android log日志分析 https://www.cnblogs.com/liyiran/p/7686296.html
- android动态库死机调试方法 https://blog.csdn.net/andyhuabing/article/details/
- 如何读懂和分析Android logcat http://blog.chinaunix.net/uid-29728680-id-5054948.html
- 解读Android日志 https://blog.csdn.net/_/article/details/
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/h6javajc/11395.html