这个博客已经停止更新,请访问blog.mxslly.com
分类: Android平台
2015-11-24 10:43:54
文档:使用logcat调试
本页是页面的,翻译工作已完成100%。
介绍一下logcat
对于不熟悉adb logcat的您来说,现在应该是介绍一下的时候了。
当Android运行时,它会收集所有的系统信息。如您所知,程序员、开发者可以选择实时输出状态信息(或是错误信息、调试提示)到系统日志中,Android本身也通过这种方式输出所有有用的信息。
但是,对于一个随时更新的日志,又如何查看它呢?
如果您通过(使用USB或其他方式)连接到设备,试着在计算机上输入adb logcat。Android执行操作日志将实时输出到终端窗口上,可以随时按^C(Ctrl+C)结束。
那么,我们假设您遇到了循环重启的问题,想知道“引擎盖下”到底发生了什么。没问题,您可以查看adb logcat。即使它看上去像流水账一样,您也可以把它的输出(通常错误都比较明显,如果您坐下来看看,可能会找到类似“ERROR!!!!!”的文字)复制粘贴到网上,比如(译注:国内用户访问该网站可能会遇到问题,尝试)(当然,确保没有将偶现日志中的本地IP或其他敏感个人信息粘贴上去)。您可以以这种方式(通过链接)将该问题展示给其他人,用于以后的讨论、调试等。
无论如何,从现在开始——不要只说“救命!我的机器循环重启!”,而应该说“救命!我的机器循环重启,这是logcat日志链接!”
注意:
为什么叫“logcat”?以下内容是我的猜测。在Unix(或Linux)下,有一个“cat”(连接文件并输出到标准输出设备(concatenate files and print on the standard output),不管你信不信)命令,用于同时显示多个文件的内容,但通常却被(滥)用作查看单个文件的内容。在此情况下,cat相当于动词。您可以在类Unix操作系统(包括Linux和OS X)终端中输入cat 某个文件.txt,它会显示文件的内容。那么,我猜“logcat”是“显示(cat)log内容”的意思。
红利命令!:如果您使用Linux或OS X,想在终端中查看文件内容,但是不希望像cat filename.txt命令一样没有停顿的显示所有内容,可以使用more filename.txt代替。(它的工作原理留作课后思考。)
原始出处:http://forum.xda-developers.com/showpost.php?p=21353661&postcount=1570
高级用法
过滤
基于优先级
adb logcat提供了额外的功能,可基于日志优先级来过滤日志。用法为adb logcat *:#,其中#为下述选项之一。
V 详细(表示所有可能的日志,默认级别)
D 调试(表示所有合理的调试用日志)
I 信息(表示正常使用时的日志)
W 警告(表示可能有问题,还没发生错误)
E 错误(表示有问题并导致出错)
F 致命(表示有问题导致运行时发生致命错误,通常导致重启)
所有优先级都自动包含比它高的优先级,因此adb logcat *:W包含警告、错误和致命错误。当应用崩溃时,您可以使用adb logcat *:E来查看导致该问题的原因,而不必费力去查看那些不着边际的调试用日志。然而在将日志提供给开发者时,应包含所有日志(不要设置任何过滤),因为通过调试日志通常可以找到问题的真正原因。
基于内容
您还可以基于“内容”来过滤。比方说,您要收集所有提到术语“Google”的日志行。可以这么做:
$ adb logcat | grep Google
此命令获取“logcat”的输出(所有东西),并将其“重定向”至命令,其搜索“Google”并只返回包含它的行。
小提示
请注意,管道符“|”与大写“I”、小写“L”、数字“1”或其它什么unicode中的竖线图形标志符不同。在美式键盘上,管道符一般可由按住Shift键并按下“\”键打出。管道符可用于将一个命令的输出“重定向”至下个命令的输入中。上述例子中,adb logcat的输出就成为了grep的输入。
如果您想使搜索不区分大小写,只需要添加-i参数:
$ adb logcat | grep -i Google
这会返回带有“Google”、“google”、“gOoGlE”以及其它任意大写小写字符组合的日志行。
颜色
adb logcat -C可用于为日志着色,以增强可读性。
如果您对-C参数不满意,可以使用有额外颜色设置的logcat脚本,或者自己写一个。
清空
如果您发现屏幕上塞满了没用的日志信息,但仍需要详细的日志,可以使用adb logcat -c清除日志缓冲区。它会重置日志并只显示重置后的日志内容。
Logcat用于错误跟踪
在设备上使用
这会在你的SD卡上生成一个logcat文件,你可以将它作为附件加入缺陷报告。
-d 转存logcat内容
-f 指定日志保存位置
*:V 以详细模式输出日志
注意:
在您复现您要回报的问题“之后”再运行logcat命令。
注意:
由于谷歌于CM 10.0/Android 4.1(果冻豆,Jellybean)开始更改了Android内部API,设备上的应用程序将需要root权限才能访问完整的logcat(应用程序现在仅限于自己生成的日志)。对于内置的终端模拟器,您只需要在运行logcat命令之前键入su并回车。