【问题标题】:Logcat crashes with error: unexpected EOFLogcat 崩溃并出现错误:意外的 EOF
【发布时间】:2018-07-19 06:50:51
【问题描述】:

我正在运行一些冗长的计算,但很晚才出现问题。我尝试使用断点,但到目前为止没有成功。所以我在循环中放了一个Log.d 来监控...

但很快,Logcat 就会崩溃:

02-08 16:35:42.820 2936-3402/com.nohkumado.geneticsolving.full D/BaseC: 
    norm:BC sq:49.0 dis:0.0 con:50.0/BC sq:56.0 dis:4.0 con:94.0=1.4069148936170213

    read: unexpected EOF!

    --------- beginning of crash

我需要重新启动工作室才能让 Logcat 再次运行。

我查看是否可以找到 Logcat 的缓冲区大小设置,但到目前为止我一无所获。可以做什么?

【问题讨论】:

  • 提问者将两个不相关的东西混为一谈。消息“开始崩溃”表示 Android 应用程序崩溃,而不是 logcat。 “阅读:意外的 EOF!”确实来自 logcat 进程,它表明 logcat 进程失去了与 logd 进程的连接。
  • 嗯,应用程序没有崩溃,只是没有收敛......但由于 logcat 的缓冲区限制,我看不到它......

标签: android android-logcat


【解决方案1】:

这些建议对我不起作用。我终于改变了这个偏好设置:

菜单“运行”,菜单项“编辑配置”,然后在左侧的“Android App/app”和右侧的选项卡“杂项”,最后激活“Logcat:启动前清除日志”。

当然这有副作用,但至少我可以再次看到日志输出。

【讨论】:

  • 这是“杂项”,而不是“米开朗基罗”?
【解决方案2】:
  1. 删除所有 log.d 并重新启动 android studio,然后转到 File -> Invalidate Caches / Restart。
  2. 您的设备设置->开发者选项
  3. 更改日志缓冲区大小

【讨论】:

    【解决方案3】:

    由于在 while 循环中读取文本文件,我遇到了同样的问题。我在 while 循环中有两个 log.d 语句,文件大小约为 220 MB。我删除了 while 循环中的 log.d 语句,因为它在 logcat 中产生了很多输出。我将 logcat 的大小增加到了可能的最大值。这对我有用,尽管处理时间在我得到想要的结果之前很长。

    【讨论】:

      【解决方案4】:

      使用以下命令:

      adb logcat -G 20M
      

      【讨论】:

        【解决方案5】:

        不幸的是,这似乎仍然是一个问题,除了安装插件之外,我找不到令人满意的解决方案(文件 -> 设置 -> 插件 -> 市场)称为“日志查看器”。比 Android Studio 内置的 logcat 查看器效果更好。

        【讨论】:

          【解决方案6】:

          只需转到 File -> Invalidate Caches / Restart 就会让 android studio 完成这项工作

          【讨论】:

          • 我认为这对解决问题本身没有帮助,但是 AS 重启会重启 logcat,显然可以解决问题。
          • @PNDA 为什么不让 android 验证您的缓存并为您重新启动它?没看出缺点在哪里
          【解决方案7】:

          重启您的设备!我不知道为什么重启手机后它对我有用。

          【讨论】:

            【解决方案8】:

            在开发人员选项中,您可以将 Logger 缓冲区大小设置为最大 16M。
            (设置 > 系统 > 开发人员选项 > 记录器缓冲区大小)

            如果您需要更多,可以使用 adb 进行设置。 例如,您可以将其设置为 100M:

            adb logcat -G 100M
            

            【讨论】:

              【解决方案9】:

              更改缓冲区大小对我不起作用。所做的是将我的 USB 连接更改为 USB 3.0 端口。

              【讨论】:

              • 太棒了!谢谢你的提示。我有同样的问题。
              • 同样,还要移除位于您的设备和计算机之间的所有 USB 集线器和/或尝试计算机上的不同 USB 端口。
              【解决方案10】:

              adb logcat -G 1m

              在终端上输入这个,它对我有用

              【讨论】:

                【解决方案11】:

                如果您是使用真实手机运行 - 从 USB 断开并连接手机对我有用(缓冲区变空 - 就像 @Suragch 建议的那样)。

                【讨论】:

                  【解决方案12】:

                  更全面的答案

                  接受的答案对我不起作用。我没有关闭记录器缓冲区,而是将其增加到最大大小。

                  1. 如果尚未启用,请在您的模拟器或设备(不是 Android Studio)中启用开发者选项:在您的模拟器或设备中,转到 设置 > 系统 > 关于(模拟设备) 并点击 Build number 7 次。
                  2. 转到设置 > 系统 > 开发人员选项 > 记录器缓冲区大小,然后选择更高的值。

                  1. 我还必须重新启动模拟器。

                  所以最初的问题显然是因为设备日志缓冲区被填满以进行冗长的日志记录。增加缓冲区大小允许您在单个日志记录会话中记录更多内容。

                  【讨论】:

                  • 使用这个我可以在正常工作日避免这个问题。我有一个例外:在有很多蓝牙设备的环境中使用三星手机。三星决定在系统级别记录每次蓝牙扫描,显然 16M 是不够的。当我周围有 30 多个蓝牙设备时,它仍然会每天发生 4 到 5 次。
                  • logd 缓冲区是一个环形缓冲区,改变它的大小应该对 logcat 和 logd 之间的连接是否丢失没有可衡量的影响。它所做的只是改变内存中的日志记录历史。这不太可能解决问题。
                  • @satur9nine,我不能说它是否在底层解决了问题,但它解决了我的问题,因为它防止了崩溃并允许显示更多日志消息。
                  • 在将 TWRP 备份从一台 Moto G5 Plus 传输到另一台后,我的 logcat 缓冲区包含几个月前的一些事件、今天的一些事件,然后是 read: unexpected EOF!。增加到 16M 解决了这个问题,并使几个月前的事件消失了。
                  【解决方案13】:

                  尝试在您的设备/模拟器上的设置->开发者选项下将记录器缓冲区大小设置为关闭 .这可能是因为 Logger 缓冲区 配置为仅在特定时间显示有限 KB 的日志。下一组日志只有在前一个缓冲区被清除后才会显示。

                  【讨论】:

                  • 确实,平板端的logcat是固定长度的!
                  • 我把它关掉了,现在我根本看不到任何日志。 (三星注 8)。我不认为这是适合所有人的解决方案
                  • 我把它关掉了,但作为问题开启者我仍然收到错误。
                  • 这对我有用(使用模拟器)。这个问题最近才开始。
                  • 这不应该是一个认可的答案,最好增加缓冲区以防止其耗尽,而不是在真实设备上将其关闭。虽然它可能取决于设备/Android 操作系统版本。
                  【解决方案14】:

                  您发布的此日志说明应用程序崩溃(虽然不是以通常的方式使用堆栈跟踪但它正在崩溃),而不是 logcat。您是否在 logcat 中选择了应用程序并将过滤器设置为“显示选定的应用程序”?如果是这样,只需将过滤器设置为“无过滤器”,您就会看到应用的所有日志。

                  此外,如果您出于任何原因需要重新启动 logcat,您可以运行以下命令来重新启动 adb 并最终重新启动 logcat,而不是重新启动 Android Studio:

                  adb kill-server
                  adb start-server
                  

                  【讨论】:

                  • 这很奇怪,因为应用程序似乎继续工作?我很确定计算本身(因此我希望调试它)但其余的工作,点击按钮等继续产生预期的行为? adb 技巧恢复了 logcat,不幸的是跳过到实际时间点......
                  • 我想你所说的冗长计算是什么意思,然后出现问题,这意味着应用程序可能变得迟钝或没有响应然后崩溃。应用程序是否由多个活动组成?当错误发生时,它就像回到以前的活动吗?没有过滤器不显示所有日志对吗?
                  • 不,应用程序运行顺利,其结果在某些时候偏离了预期,是的,有几个活动和工作线程是通过异步任务完成的,没有在那次崩溃消息之后,logcat 对所有事情都很平淡....
                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2015-12-09
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多