使用logcat调试

来源:互联网 发布:win10 软件消失了 编辑:程序博客网 时间:2024/06/05 11:20

介绍一下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

0 0
原创粉丝点击