开机失败或超时时,留下客体现场(logcat、dmesg 等)

未关闭
#24 0 条评论 0 个 reaction 已指派 1 人 在 GitHub 查看

维护者通常 1 天内回复

@qiyinxi 已经在做这个了。

开始于 2026年11月1日。

评估

这个 Issue 还没有评估数据。

描述

enhancement P2

现象

modavd start / create(以及管理器、MCP 的开机)只在安卓开机完成以后,才开始把客体日志存进 <根目录>\logs。开机超时、launch_failed、zygote 起不来时,只留下模拟器自己的日志,没有 logcat,也没有 dmesg。

10-31 实测碰到过一次:新建的 6 GB 实例首次开机约 271 秒仍没完成,sys.boot_completed 一直为空,gpu、media、zygote 反复重启,当时现场看到 logcat 报 CANNOT LINK EXECUTABLE ... library "libstatspull.so" not found。

  • libstatspull.so 在压缩 APEX com.android.os.statsd 里,首次开机才解压到 /data/apex/decompressed/,那次应该是这一步没成。
  • 删掉实例、按同样的 6 GB、4 核配置重建,首次开机就正常了,之后没再复现。
  • 原因查不到:客体日志没存下来,数据盘也随实例删了。

要做到的

开机失败或超时时,在关机之前尽量收一份客体现场:

  • logcat -d -b all、dmesg(要 root 就先试 su 0)、getprop、ps -A、/proc/meminfo、dumpsys activity processes 的头几百行;
  • 放进 logs\<实例名>-<时间>-bootfail\,路径写进错误结果的 details(只加字段,不改错误码和已有字段);
  • 每一项都有时限,拿不到就跳过;整个收集有总时限(比如 30 秒),不让失败的开机拖得更久;
  • 这些文件可能带账号信息,和问题包的规矩一样只存本机。

进度

已经在做:本地分支 fix/boot-diag,还没推到公开仓库。它基于较早的 376664e,开 PR 前要先 rebase 到现在的 main。

审查留下、还没改的(P2):

  1. 用户取消开机时也会去收集现场,afterBoot 之后那一处甚至只在取消时才触发。改成只在真失败时收集(timeout、launch_failed、zygote 起不来),并补测试:取消时不收集。
  2. dumpsys activity processes | head -n 300 一直收不到:adb shell 会把多个参数直接拼起来、不加引号,内层的 sh -c 只执行了不带参数的 dumpsys。改成单个字符串传给 shell(和 m.shell 的写法一致),测试里对拼出来的整条命令做断言。
  3. setupNew 在新建的期限到了、或者被取消时又包一层错误,details 丢了,现场目录的路径传不出去。
  4. bootfail 目录从来不清理,也不算进日志的保留数量和 1 GiB 总量。
  5. logcat 单项只给 5 秒,而且要求退出码为 0:被杀掉或非 0 退出时,已经读到的内容全丢。改成保留已读到的部分。
  6. modavd collect-info 收不到这个目录:它只按文件名收 logs 下的日志。要把 *-bootfail 目录一起收进问题包。

P3:README 的 --json 约定里补上 details;文本模式也打印现场目录的位置。

验收

  • 用一个开不完机的实例跑 modavd start:超时报错,logs 里有这次的 -bootfail 目录,报错和 --json 的 details 里有路径;
  • 开机中途取消(Ctrl+C、管理器里点「关机」)不收集;
  • collect-info 打出的问题包里有这个目录;
  • 正常开机的行为和日志不变,用假 adb 测到各条命令分别成功、超时、失败。
主要语言
Go
星标
0
派生
1
平均合并
2 小时 42 分钟
30 天内合并 PR
13

环境准备

这个项目没有提供开发容器、Dockerfile 或贡献指南,环境需要你自己搭建:先看它的 README,通用步骤见我们的新手贡献指南。

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

ModAVD/ModAVDManager 的其他 Issue

查看 ModAVD/ModAVDManager 的全部 Issue

相似的 Issue

更多 Go Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。