提问人:Andriy 提问时间:7/17/2023 最后编辑:user4157124Andriy 更新时间:7/17/2023 访问量:102
SQLite在执行sqlite3_step时冻结
SQLite freezes while performing sqlite3_step
问:
我们的应用程序开始记录由 SQLite 中的死锁引起的崩溃报告:
Exception Type: EXC_CRASH (SIGKILL)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Termination Reason: RUNNINGBOARD 0xdead10cc
它发生在我们应用程序的 iPhone/iPad 版本中。我们使用系统内置的SQLite库和开放数据库,设置如下:
int err = sqlite3_open_v2(db_path, &db, SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE | SQLITE_OPEN_FULLMUTEX, nil);
报告指示应用在某个非主线程处冻结,执行以下操作:
Thread 2 name:
Thread 2:
0 libsystem_kernel.dylib 0x00000001ea5fcd9c pread + 8 (:-1)
1 libsqlite3.dylib 0x00000001d065a228 seekAndRead + 96 (sqlite3.c:41646)
2 libsqlite3.dylib 0x00000001d05d3078 unixRead + 208 (sqlite3.c:41738)
3 libsqlite3.dylib 0x00000001d05e5e60 readDbPage + 180 (sqlite3.c:64270)
4 libsqlite3.dylib 0x00000001d0663ca8 getPageNormal + 488 (sqlite3.c:66892)
5 libsqlite3.dylib 0x00000001d066f388 getAndInitPage + 100 (sqlite3.c:76131)
6 libsqlite3.dylib 0x00000001d06705f8 moveToLeftmost + 136 (sqlite3.c:79298)
7 libsqlite3.dylib 0x00000001d05f93b4 sqlite3VdbeExec + 5000 (sqlite3.c:102042)
8 libsqlite3.dylib 0x00000001d05f75b4 sqlite3_step + 984 (sqlite3.c:94140)
某些崩溃报告具有以下堆栈:
Thread 3 name:
Thread 3:
0 libsystem_kernel.dylib 0x00000001df2adc88 fsync + 8 (:-1)
1 libsqlite3.dylib 0x00000001c52c7d18 unixSync + 212 (sqlite3.c:42244)
2 libsqlite3.dylib 0x00000001c52d0560 syncJournal + 576 (sqlite3.c:65600)
3 libsqlite3.dylib 0x00000001c52c78a4 sqlite3PagerCommitPhaseOne + 392 (sqlite3.c:67879)
4 libsqlite3.dylib 0x00000001c52b871c sqlite3BtreeCommitPhaseOne + 172 (sqlite3.c:78021)
5 libsqlite3.dylib 0x00000001c52b81ec vdbeCommit + 688 (sqlite3.c:90610)
6 libsqlite3.dylib 0x00000001c5290998 sqlite3VdbeHalt + 1320 (sqlite3.c:91020)
7 libsqlite3.dylib 0x00000001c52b29b4 sqlite3VdbeExec + 43400 (sqlite3.c:99633)
8 libsqlite3.dylib 0x00000001c52a75b4 sqlite3_step + 984 (sqlite3.c:94140)
甚至这个:
Thread 4 name:
Thread 4:
0 libsqlite3.dylib 0x00000001eb90ef18 accessPayload + 312 (sqlite3.c:78866)
1 libsqlite3.dylib 0x00000001eb8f4634 sqlite3VdbeMemFromBtree + 200 (sqlite3.c:87070)
2 libsqlite3.dylib 0x00000001eb8e9e24 sqlite3VdbeExec + 40440 (sqlite3.c:98870)
3 libsqlite3.dylib 0x00000001eb8df5b4 sqlite3_step + 984 (sqlite3.c:94140)
这些是来自不同崩溃日志的摘录,没有对 SQLite lib 的任何其他调用。我们无法在调试版本上重现崩溃,也没有重现步骤,但确信它不依赖于查询,因为它发生在整个应用的不同位置,执行只读和修改查询。
如何解决这个问题或在哪里找到答案?我可以添加什么来帮助调查问题吗?
答: 暂无答案
评论