Android 设备的日志缓冲区被写满,logcat: Unexpected EOF!

  • 在 Android Studio 中,使用 Logcat 时,出现如下信息

    WARNING: Logcat was not cleared on the device itself because 'logcat -c' timed out.
    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.

问题原因
  1. Android 设备的日志缓冲区被写满了,而且新日志生成的速度太快,导致 Logcat 读取跟不上,从而连接中断

  2. 报错的是 Android Studio,也就是 ADB 客户端,而不是设备本身

    1. 写入速度大于读取速度,生产者(设备)和消费者(Android Studio)之间出现了速度差

    2. 如果生产者写入新数据的速度极快,以至于在新数据覆盖旧数据的过程中,把 Android Studio 还没来得及读取的那段旧数据也给覆盖掉了,于是报错

处理策略
  • 使用 ADB 清空现有日志,立即恢复
shell 复制代码
adb logcat -c
补充学习
  1. 查看缓冲区大小
shell 复制代码
adb logcat -g
复制代码
# 输出结果

main: ring buffer is 16 MiB (597 KiB consumed), max entry is 5120 B, max payload is 4068 B
system: ring buffer is 16 MiB (256 KiB consumed), max entry is 5120 B, max payload is 4068 B
crash: ring buffer is 16 MiB (0 B consumed), max entry is 5120 B, max payload is 4068 B
kernel: ring buffer is 16 MiB (12 KiB consumed), max entry is 5120 B, max payload is 4068 B
  1. 修改缓冲区大小,例如,将缓冲区大小设为 4MB
shell 复制代码
adb logcat -G 4m
  1. 缓冲区的"自清"

    1. Android 的 logcat 缓冲区在底层是一个环形缓冲区

    2. 当新日志写入时,如果缓冲区还有剩余空间,就直接追加

    3. 当缓冲区完全写满时,新日志会从缓冲区的头部开始覆盖最旧的日志

相关推荐
xcl092516 分钟前
分销返利商城系统开发实战:返利算法与架构设计指南
java·spring boot
171320330计算机毕设编程20 分钟前
2027计算机毕设五大方向对比&选题推荐
java·ide·python·算法·django·php·推荐算法
171320330计算机毕设编程21 分钟前
基于SpringBoot的在线拍卖系统
android·java·spring boot·小程序·课程设计
用户09340777351423 分钟前
HarmonyOS WPS Open SDK 实践:OpenFileRequest 打开链路与沙箱拷贝
android·typescript·harmonyos
未秃头的程序猿26 分钟前
一次秒杀把服务打挂了,我用Sentinel规则配置化救了回来
java·后端·spring cloud
Zane199429 分钟前
明明没删字段,反序列化却报错:都是隐式 serialVersionUID 惹的祸
java·后端
0xBADCODE31 分钟前
动态DEX加载+反射+DES硬编码密钥:安卓三层逆向实战
android·java·python·安全·网络安全·逆向·ctf
被摘下的星星35 分钟前
Java 中 .length、.length() 以及 .size() 的区分
java·开发语言
代码不停40 分钟前
子数组问题
java·算法