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

Đang mở
#24 0 bình luận 0 reaction 1 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

@qiyinxi đang làm issue này rồi.

Từ ngày 1/11/2026.

Đánh giá

Issue này chưa được đánh giá.

Mô tả

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 测到各条命令分别成功、超时、失败。
Ngôn ngữ chính
Go
Star
0
Fork
1
Merge trung bình
2 giờ 42 phút
Pull request đã merge (30 ngày)
13

Chuẩn bị môi trường

Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của ModAVD/ModAVDManager

Tất cả issue của ModAVD/ModAVDManager

Issue tương tự

Thêm issue về Go

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.