Chinaunix首页 | 论坛 | 博客
  • 博客访问: 124012
  • 博文数量: 16
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 222
  • 用 户 组: 普通用户
  • 注册时间: 2014-07-23 22:32
个人简介

这个博客已经停止更新,请访问blog.mxslly.com

文章分类
文章存档

2018年(4)

2016年(3)

2015年(8)

2014年(1)

我的朋友

分类: Android平台

2015-11-24 10:43:54

文档:使用logcat调试

本页是页面,翻译工作已完成100%


介绍一下logcat

对于不熟悉adb logcat的您来说,现在应该是介绍一下的时候了。

Android运行时,它会收集所有的系统信息。如您所知,程序员、开发者可以选择实时输出状态信息(或是错误信息、调试提示)到系统日志中,Android本身也通过这种方式输出所有有用的信息。

但是,对于一个随时更新的日志,又如何查看它呢?

如果您通过(使用USB或其他方式)连接到设备,试着在计算机上输入adb logcatAndroid执行操作日志将实时输出到终端窗口上,可以随时按^CCtrl+C)结束。

那么,我们假设您遇到了循环重启的问题,想知道引擎盖下到底发生了什么。没问题,您可以查看adb logcat。即使它看上去像流水账一样,您也可以把它的输出(通常错误都比较明显,如果您坐下来看看,可能会找到类似“ERROR!!!!!”的文字)复制粘贴到网上,比如(译注:国内用户访问该网站可能会遇到问题,尝试)(当然,确保没有将偶现日志中的本地IP或其他敏感个人信息粘贴上去)。您可以以这种方式(通过链接)将该问题展示给其他人,用于以后的讨论、调试等。

无论如何,从现在开始——不要只说救命!我的机器循环重启!,而应该说救命!我的机器循环重启,这是logcat日志链接!

注意:

为什么叫“logcat”?以下内容是我的猜测。在Unix(或Linux)下,有一个“cat”(连接文件并输出到标准输出设备(concatenate files and print on the standard output),不管你信不信)命令,用于同时显示多个文件的内容,但通常却被(滥)用作查看单个文件的内容。在此情况下,cat相当于动词。您可以在类Unix操作系统(包括LinuxOS X)终端中输入cat 某个文件.txt,它会显示文件的内容。那么,我猜“logcat”显示(catlog内容的意思。

红利命令!:如果您使用LinuxOS 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脚本,或者自己写一个。

  • 由杰夫·夏基(Jeff Sharkey)写的彩色logcat博文
  • 由马歇尔·卡皮普(Marshall Culpepper)写的logcat-color

清空

如果您发现屏幕上塞满了没用的日志信息,但仍需要详细的日志,可以使用adb logcat -c清除日志缓冲区。它会重置日志并只显示重置后的日志内容。

 

Logcat用于错误跟踪

在设备上使用

这会在你的SD卡上生成一个logcat文件,你可以将它作为附件加入缺陷报告。

  • 打开您喜欢的终端应用(CM预装了终端模拟器
  • 切换到root(输入su并确认root权限)
  • 输入logcat -d -f /sdcard/logcat.log *:V
  • 此外可以用logcat -b radio查看通讯模块的日志缓冲区。

-d    转存logcat内容

-f    指定日志保存位置

*:V   以详细模式输出日志

注意:

在您复现您要回报的问题之后再运行logcat命令。

注意:

由于谷歌于CM 10.0/Android 4.1(果冻豆,Jellybean)开始更改了Android内部API,设备上的应用程序将需要root权限才能访问完整的logcat(应用程序现在仅限于自己生成的日志)。对于内置的终端模拟器,您只需要在运行logcat命令之前键入su并回车。

 

阅读(1812) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~