您的位置:首页 > 其它

使用logcat调试

2016-01-24 10:24 204 查看


介绍一下logcat

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

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

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

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

那么,我们假设您遇到了循环重启的问题,想知道“引擎盖下”到底发生了什么。没问题,您可以查看
adb logcat
。即使它看上去像流水账一样,您也可以把它的输出(通常错误都比较明显,如果您坐下来看看,可能会找到类似“ERROR!!!!!”的文字)复制粘贴到网上,比如pastebin.com(译注:国内用户访问该网站可能会遇到问题,尝试paste.ubuntu.com)(当然,确保没有将偶现日志中的本地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”的输出(所有东西),并将其“重定向”至
grep
命令,其搜索“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(Git代码库博文
由马歇尔·卡皮普(Marshall Culpepper)写的logcat-color(Git代码库


清空

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


Logcat用于错误跟踪


在设备上使用

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

Open Console Application of your choice (CM <=11.0 comes with 'Terminal Emulator' preinstalled; CM >=12.0 has 'Terminal' that you can turn on in Developer Options)
Switch to root (type
su
and confirm root access)
(You may
have to turn on root access for apps in Developer Options)
Type
logcat -d -f /sdcard/logcat.log *:V

Alternatively the radio buffer can be viewed with
logcat -b radio


-d    makes it dump the logcat
-f    tell it where to save the log to
*:V   gets all Logs in Verbose mode


注意:
在您复现您要回报的问题“之后”再运行logcat命令。

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

原文链接:https://wiki.cyanogenmod.org/w/Doc:_debugging_with_logcat/zh-cn
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: