Android调试之Logcat
在Android开发过程中,总免不了要调试,无论是Debug,还是Android自带的Logcat,抑或DDMS等等,使用得当会给我们开发带来事半功倍的作用。平时各种调试手段都试过,但很多东西,特别是一些命令,用完就忘了,想起来要用又要google;所以打算把这些东西整理出来,方便日后查看,也算是对一些经验的总结
Logcat
1.查看Android的logcat日志
Android系统在运行时会产生很多日志,以方便开发人员调试。Logcat日志是保存在洗头膏内存中的,从系统启动后就将系统各模块和各应用输出地日志统一放在内存中的一个环状队列中。将日志保存在系统内存中,确保了日志功能不会影响应用的速度,而环状队列是避免日志无限增长(环/Users/adison/octopress/source/_posts/2014-10-18-volley-cachefen-xi.markdown状结构,最后一个记录写满后会从第一个位置开始写)。
可以使用 “adb logcat” 查看这个内存中的日志
在应用中可以用Log类中的方法输出logcat日志。下面是几个常用的日志函数:
- v(String,String) 记录冗余级别的日志
- d(String,String) 记录调试级别的日志
- i(String,String) 记录信息级别的日志
- w(String,String) 记录警告级别的日志
- e(String,String) 记录运行错误级别的日志
它们的优先级由低到高是v < d < i< w< e
2.过滤logcat日志
2.1.基于优先级
adb logcat提供了额外的功能,可基于日志优先级来过滤日志。用法为adb logcat *:#,其中#为上述级别之一。
所有优先级都自动包含比它高的优先级,因此adb logcat *:W包含警告、错误和致命错误。当应用崩溃时,您可以使用adb logcat *:E来查看导致该问题的原因,而不必费力去查看那些不着边际的调试用日志。然而在将日志提供给开发者时,应包含所有日志(不要设置任何过滤),因为通过调试日志通常可以找到问题的真正原因。
在调试应用时,可以使用“<标签>:<优先级>”的过滤条件去除很多不相关的日志。其中<标签>条件告诉logcat只输出具有制定标签的日志,而“优先级”条件则告诉logcat要输出日志的最低优先级,可以在logcat命令行中同时制定多个过滤条件,每个条件使用空格分隔即可。下面的命令只输出变标签为“ActivityManager”,优先级高于“信息”级别,标签为“dalvikvm”,优先级高于“调试”级别的消息,最后的“*😒”过滤条件将具有其他标签的日志消息全部屏蔽。
adb logcat ActivityManager:I dalvikvm:D *:s
2.2.基于内容
您还可以基于“内容”来过滤。比方说,您要收集所有提到术语“Google”的日志行。可以这么做:
adb logcat | grep Google
3.其他技巧
清空
如果您发现屏幕上塞满了没用的日志信息,但仍需要详细的日志,可以使用adb logcat -c清除日志缓冲区。它会重置日志并只显示重置后的日志内容。
Logcat用于错误跟踪
adb shell
logcat -d -f /sdcard/logcat.log *:E
-d 转存logcat内容
-f 指定日志保存位置
*:E 输出错误日志