android - Mysterious Signal 11 在访问 Room 数据库时崩溃

标签 android segmentation-fault android-room koin

关于

我有一个 android 应用程序,它有 2 个 Activity 。 Activity A 产生 Activity B, Activity B 访问另一个模块中的房间数据库。我使用 Koin 进行所有依赖项注入(inject),并使用 rxandroid(用于观察的 Schedulers.io() 和用于观察的 UI 线程)观察数据库事务

问题

当我访问数据库时,操作成功完成,数据库中添加了一个条目,然后 1-2 秒后 Activity 崩溃,应用程序返回到 Activity A,应用程序中没有堆栈跟踪或任何错误消息日志猫。

我正在 AVD Pixel 2 API 28 中测试应用

如果我从 logcat 中删除所有过滤器,我会发现这个错误:

2021-01-14 22:31:01.836 9799-9799/com.example.myapp I/System.out: Saving Course
2021-01-14 22:31:01.928 9799-9799/com.example.myapp I/System.out: Added course to DB: 11
2021-01-14 22:31:02.822 9799-9835/com.example.myapp I/om.example.myap: Explicit concurrent copying GC freed 94987(4MB) AllocSpace objects, 0(0B) LOS objects, 49% free, 3MB/6MB, paused 329us total 10.624ms
2021-01-14 22:31:03.439 1935-2006/? W/InputDispatcher: channel '7a68875 com.example.myapp/com.example.myapp.activities.CourseCreatorActivity (server)' ~ Consumer closed input channel or an error occurred.  events=0x9
2021-01-14 22:31:03.439 1935-2006/? E/InputDispatcher: channel '7a68875 com.example.myapp/com.example.myapp.activities.CourseCreatorActivity (server)' ~ Channel is unrecoverably broken and will be disposed!
2021-01-14 22:31:03.441 1935-2006/? W/InputDispatcher: channel '1c99176 com.example.myapp/com.example.myapp.activities.MainActivity (server)' ~ Consumer closed input channel or an error occurred.  events=0x9
2021-01-14 22:31:03.441 1935-2006/? E/InputDispatcher: channel '1c99176 com.example.myapp/com.example.myapp.activities.MainActivity (server)' ~ Channel is unrecoverably broken and will be disposed!
2021-01-14 22:31:03.443 1773-1773/? I/Zygote: Process 9799 exited due to signal (11)

信号 11 显然是段错误..

我尝试过的

  1. 仅创建房间实体而不将其插入数据库仍然会导致崩溃
  2. 删除 Activity A 并在 Activity B(访问数据库)上启动应用程序似乎不会产生错误(我尝试了几十次)
  3. 使用调试器单步执行保存功能。我可以中断主线程或 IO 线程,在这两种情况下,尽管线程处于中断状态,应用程序仍会崩溃。
  4. 将 rxandroid 替换为 kotlin 协程。在此之后崩溃仍然发生
  5. 我已尝试在我的手机(像素 3a)上调试应用程序,但到目前为止无法重现崩溃。不过会继续努力。
  6. 我在 API 30 的 Pixel 3a AVD 上试过这个,但无法重现崩溃。然后我在 API 28 上尝试了 Pixel 3a AVD,崩溃就在那里。所以目前它似乎只发生在 API 28 中......
  7. 已使用 API 27 和 API 29 进行测试,均运行良好。删除 API 28 SDK 并重新下载它,删除所有相关的 AVD 并重新创建它们,仍然收到信号 11 崩溃,就像第二次尝试全新安装 API 28 一样。所以段错误似乎只发生在 Android Pie 上
  8. 我开始创建我在这里使用的相同总体架构和逻辑的简化版本,以努力查明错误的确切来源。我不太热衷于重新开始简化的项目,因为不知道是什么导致了这个错误,我很可能最终会再次遇到它。

注意:有时我会进行更改,它会“修复”问题,只是为了它会在一段时间后重新出现,这使得使用传统方法很难调试

结论

我真正需要的是一些调试方法。我不知道是什么原因造成的,也不知道如何继续调试它。

最佳答案

我更改为不同的 android API 级别,此后问题没有再出现

关于android - Mysterious Signal 11 在访问 Room 数据库时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65727721/

相关文章:

android - 使用Android Studio中的gradle,如何为 “run”进度指定productFlavors名称?

android - MediaMuxer 视频文件大小减小(重新压缩,降低分辨率)

java - Android Facebook key 哈希—— "remote_app_id does not match stored id"

java - 房间数据库 - 外键约束失败错误代码 787

java - Android 安全登录背后的网页抓取

swift - 尝试从字符串中检索随机字母时出现段错误

在 shell 中工作的 Python 段错误 - Mavericks readline.so 错误

c - 插入操作中段错误错误

android - 使用带有 Android 的 Room 使用 UUID 作为主键

java - ROOM持久性库更新和删除不会改变任何东西