gpt4 book ai didi

android - 使用 Realm 获取致命信号 11 (SIGSEGV),代码 1

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:36:39 25 4
gpt4 key购买 nike

这个错误似乎是由 native 代码中的错误引起的,这是由于 Realm 引起的图书馆——基于看到短语 librealm-jni.so在错误下方的“Build Fingerprint”中。我有最新版本的 Realm已安装 -- 1.2.0。

错误代码如下:

Fatal signal 11 (SIGSEGV), code 1, fault addr 0x14c in tid 7837 (ator.app)

这是“构建指纹:”

    Build fingerprint: 'generic/vbox86p/vbox86p:5.0/LRX21M/buildbot11172321:userdebug/test-keys'
26643-26643/? I/DEBUG: Revision: '0'
26643-26643/? I/DEBUG: ABI: 'x86'
26643-26643/? I/DEBUG: pid: 7837, tid: 7837, name: ator.app >>> com.lockedout.app <<<
26643-26643/? I/DEBUG: signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x14c
26643-26643/? I/DEBUG: eax 00000148 ebx ffffffff ecx 7470d340 edx 00000002
26643-26643/? I/DEBUG: esi 00000000 edi 00000002
26643-26643/? I/DEBUG: xcs 00000023 xds 0000002b xes 0000002b xfs 00000007 xss 0000002b
26643-26643/? I/DEBUG: eip e2f6d025 ebp ffd3cd58 esp ffd3cd50 flags 00210246
26643-26643/? I/DEBUG: backtrace:
26643-26643/? I/DEBUG: #00 pc 0002a025 /data/app/com.lockedout.app-1/lib/x86/librealm-jni.so
26643-26643/? I/DEBUG: #01 pc 0009c141 /data/app/com.lockedout.app-1/lib/x86/librealm-jni.so
26643-26643/? I/DEBUG: #02 pc 0009c299 /data/app/com.lockedout.app-1/lib/x86/librealm-jni.so
26643-26643/? I/DEBUG: #03 pc 004002d3 /data/dalvik-cache/x86/data@app@com.lockedout.app-1@base.apk@classes.dex
26643-26643/? I/DEBUG: #04 pc 00000002 <unknown>
26643-26643/? I/DEBUG: Tombstone written to: /data/tombstones/tombstone_06

更新:

我在调用 notifyDataSetChanged 后缩小了问题范围在我的 RecyclerView.Adapter ,但是我的代码在执行之后没有做任何其他事情。所以我进一步将问题范围缩小到 android 的 Looper 中的第 135 行。类:

Message msg = queue.next(); // might block

我不确定这是什么意思,但我想有人知道 Realm 的内部结构或许能够深入了解为什么会在 Looper 中导致错误.

有关 Realm 中发生的更改的更多信息错误之前: notifyDataSetChangedRealmChangeListener 内部触发设置在 RealmObject又名“用户”。导致更改的事务删除了自定义 RealmObject又名“项目”,来自 UserRealmList<Item> .我知道这是唯一因我的代码而发生的事务和操作。这是删除 Item 的代码:

RealmSingleton.getUserInstance().executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
UserSingleton.getUser().deleteItem(mItem.getClassId());
}
});

更新:

导致错误的 Realm 代码的确切行是 SharedGroup 中的第 149 行:

148    void commitAndContinueAsRead() {
149 nativeCommitAndContinueAsRead(nativePtr);
150 }

最佳答案

(我还不是正式的 Realm 人)

注意:为了真正回答这个问题,我必须看到完整的代码。毕竟,Realm 在 native 端处理大多数可能的崩溃并将其作为 Java 的异常抛出,因此您可能做错了一些事情。 :P

猜测:

1.) 您在 UI 线程上使用异步查询和同步写入,因此 creating detached row accessors that you then try to delete based on ID despite it not being its latest version .

(异步查询不会立即执行,您需要使用 RealmChangeListener 来监听它的完成,但是如果您将它们与 UI 线程上的同步写入混合,您会强制查询变为同步。 )

2.) 您在尚未更新 UI 线程上的 RealmResults 的后台线程上修改了某些内容(使用循环程序运行事件处理),并且您尝试在事务中使用的元素不符合要求日期,因此它的删除会崩溃。

可能的解决方案:

a.) 当您在 UI 线程上时,使用 executeTransactionAsync() 而不是 executeTransaction()

b.) 在你的方法中

UserSingleton.getUser().deleteItem(mItem.getClassId());

不确定 UserSingleton 是什么,但是在删除元素之前,您应该考虑根据事务中的 ID 重新查询它以获得最新版本的元素(可能尚未更新这种特殊情况,毕竟是 UI 线程上的同步事务)

可能的行动方案:

如果你想帮助 Realm,如果这个崩溃是可重现的,请考虑将项目发送到 help[at]realm.io 以便他们可以查看并修复它。毕竟,您应该得到 Java 异常,而不是 native 崩溃。

关于android - 使用 Realm 获取致命信号 11 (SIGSEGV),代码 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39674987/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com