您的位置:首页 > 其它

adb logcat

2016-12-14 13:36 169 查看
=============简介=============

对于大多数开发者和高端手机玩家/发烧友来说,Logcat是不可或缺的工具。有了它,开发者们可以准确的找到app出错的原因,在那个部分出的错误......

--------------------正文--------------------

在学习基本命令之前我们需要了解Logcat格式以及优先级标识符和标签:

Logcat输出格式为:标签 / 程序(或服务)名 (报错/反馈源代码文件行数) : 报错/反馈内容

E.G.:
E/libgps ( 922): Interface "gps_geofencing" is not supported

复制代码

-----------------------------------------------------------------------------------------

优先级标签有如下几个(优先级依次递增):

最低优先级:V — Verbose (明细:记载程序操作信息)

D — Debug(调试信息输出)

I — Info(信息输出)

W — Warning(警告)

E — Error(错误)

F — Fatal(严重错误)

最高优先级:S — Silent (无记载)

在这里需要解释一下:有些人会认为Warning会比Fatal更加优先,事实上不是这样。一般地,Warining是指程序有可能会出现错误(E)或严重错误(F),所以Warning优先级相对较低一些。

D/BluetoothManagerService( 922): Stored Bluetooth name: Xiaomi 3

复制代码

如上一行,是我从Android 5.0开机Log中复制的一条,其中D为优先级(Priority),标签(Tag)为BluetoothManagerService,调试信息为Stored Bluetooth name: Xiaomi 3。
-------------------------------------------------------------------------------------------------
命令的使用与Log过滤
-------------------------------------------------------------------------------------------------
当你配置(Linux需要配置,win不需要)好ADB之后,执行命令:adb logcat,会有无数条Log快速生成在控制台上(如下图)



所以,如果需要抓取所有优先级的Log命令为:
adb logcat

复制代码
过滤:
那么这时就有同学会问,我只想看Error级报错怎么破??确实,如果吧一大堆Log抓下来一个一个E去找是十分不方便的,于是我们引进了强大的正则表达式:grep。

例如,如果我只想查看Error级的报错,则代码为:

adb logcat | gerp ^E

复制代码
运行效果如下图:



你会发现输出的Log全部都是Error级的了。
PS:也可以使用如下代码抓取优先级≥E的Log(以此类推)PS:1.0.32不再支持此命令
adb logcat :*E

复制代码
--------------------------------------------------------------------
下面说一下如何抓取指定应用/服务的Log:命令格式为:
adb logcat | grep [app/service name]

复制代码
例如我要抓取dalvik的log输入以下代码即可:
adb logcat | grep dalvik

复制代码
运行效果如下:



有时候我们会忘记app是否大小写,这时不必翻看menifest,可以用grep的选项忽略大小写,代码为:
adb logcat | grep -i dalvik

复制代码
其中 -i 为忽略大小写选项。当然dalvik大家都知道全为小写。。。
------------------------------------------------------------------------------------------这里有个十分重要的:每个log开头都会有 优先级 + \ 然后才是应用名,也就是说应用名是从第三个字符开始的,所以抓取代码为
adb logcat | grep ^..[appname]
其中..即为忽略优先级和\所占用的字符位置。
------------------------------------------------------------------------------------------
我们发现上面那个运行时,各种优先级的Log都会如洪水一般涌来。。很蛋疼,所以我们可以设置我们想看的优先级:
adb logcat | grep "^E.dalvik"

复制代码
这样,我们就可以得到想要的Log了。PS:这里
-----------------------------------------------------------------------
那么如何抓取多个程序/服务的log呢?我们不希望开着两个控制台抓Log,眼睛不用多会儿就要瞎。。。这时强大的grep又来了:
如果想要抓取多个程序或服务的Log,可使用一下代码:
adb logcat | grep "^..[appname]\|^..[appname]"

复制代码
例如抓取phone和netd的Log,可以使用:
adb logcat | grep "^..phone\|^..netd"

复制代码
举一反三我们也可以知道如果需要过滤多个程序并且抓取指定优先级只需要加一个优先级
adb logcat | grep "^[priority].appname]\|^[priority].[appname]"

复制代码
Logcat的基本用法,常用的命令就是这些了,大家用这个可以在新年到来之际提高Bigger!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  adb logcat