logcat: Unexpected EOF!的解决方法

        使用logcat查看打印的时候出现以下提示:

logcat: Unexpected EOF!

This means that either the device shut down, logd crashed, or this instance of logcat was unable to read log
messages as quickly as they were being produced.

If you have enabled significant logging, look into using the -G option to increase log buffer sizes.

 截图如下: 

 

一、问题原因:

        根据报错提示可以知道,是因为我们的日志缓存已经超过了设定的大小了,那么如何知道我们Android设备的日志缓存是多大呢,可以使用logcat -g 命令来查询日志缓存区的大小。

        从以上截图可以看出当前我的Android设备设定的日志缓存区大小仅为64K,故非常容易造成日志大小溢出的问题。 

二、解决方法:

        对于该问题的解决有以下两种方法。

2.1 仅解决本次日志溢出问题

        从以上第一点看,日志缓存区的大小仅为64K,故我们可以使用log -G 4M命令将当前的缓存区的大小进行修改,效果如下:

         如上,先使用logcat -G 4M 将日志缓存区大小从64K改为4M,再使用logcat -g查看修改后的日志缓冲区大小,可以看到日志缓存区已经成功改为4M了。

        注意:为什么说是仅解决本次日志溢出问题呢,因为使用该方式修改日志缓存大小并不会永久保存,当重新启动设备的时候,日志缓存区大小依然是原来的值。

2.2 永久解决日志溢出问题

        打开机器之后日志缓存区的大小默认设定是与系统属性有关的,我们先用以下命令过滤查询以下与日志缓存大小相关的系统属性

getprop | grep "persist.logd.size"

        可以看到,虽然我们在2.1中使用了logcat -G 4M 的命令暂时将缓存区的大小设置未4M,但是系统属性的值是没有被改变的,还是为原来的  "65536/1024=64K",重新启动设备之后,系统会读取该系统属性,所以日志缓存大小又会变回原来的64K。

       因此,要想达到永久修改缓存区大小的目的,我们需要将这几个值改为想要的大小,如下所示,我将这几个属性改为4M:

        再使用getprop | grep "persist.logd.size"查看一下是否修改成功:

        可以看到我们已经将这几个系统属性修改成功了,现在重启设备日志缓存大小还是4M。查看日志时就不会一会儿就看到日志缓存溢出了。

        如果想要在编译Android系统包的时候就已经设定好这些属性,可以在init.rc文件中将这些属性初始化。

 

 

        

你可能感兴趣的:(Android,java)