未使用makeFunctionNamed的应用程序中的FMDBBlockSQLiteCallBackFunction崩溃


102

我正在开发应用商店中的一个应用,该应用FMDB用于与其sqlite数据库进行交互。我们收到了一些带有堆栈跟踪的崩溃报告,如下所示:

Thread : Crashed: NSOperationQueue 0x170239c20 :: NSOperation 0x17024d7d0 (QOS: LEGACY)
0  libobjc.A.dylib                0x000000019701c0b4 objc_retain + 20
1  MyApp                          0x00000001002bdff4 FMDBBlockSQLiteCallBackFunction
2  MyApp                          0x00000001002bdb1c FMDBBlockSQLiteCallBackFunction
3  MyApp                          0x00000001002b66b4 FMDBBlockSQLiteCallBackFunction
4  MyApp                          0x00000001002980fc FMDBBlockSQLiteCallBackFunction
5  MyApp                          0x000000010029f20c FMDBBlockSQLiteCallBackFunction
6  CFNetwork                      0x00000001851475a4 __49-[__NSCFLocalSessionTask _task_onqueue_didFinish]_block_invoke + 300
7  Foundation                     0x00000001866bf1c4 __NSBLOCKOPERATION_IS_CALLING_OUT_TO_A_BLOCK__ + 16
8  Foundation                     0x0000000186610604 -[NSBlockOperation main] + 96
9  Foundation                     0x00000001866001cc -[__NSOperationInternal _start:] + 636
10 Foundation                     0x00000001866c1f28 __NSOQSchedule_f + 228
11 libdispatch.dylib              0x0000000197655954 _dispatch_client_callout + 16
12 libdispatch.dylib              0x00000001976600a4 _dispatch_queue_drain + 1448
13 libdispatch.dylib              0x0000000197658a5c _dispatch_queue_invoke + 132
14 libdispatch.dylib              0x0000000197662318 _dispatch_root_queue_drain + 720
15 libdispatch.dylib              0x0000000197663c4c _dispatch_worker_thread3 + 108
16 libsystem_pthread.dylib        0x000000019783522c _pthread_wqthread + 816

但是,从阅读FMDB代码来看,它FMDBBlockSQLiteCallBackFunction仅被称为SQLite使用FMDatabasemakeFunctionNamed:maximumArguments:withBlock:方法创建的函数的回调,而我们根本没有使用过。

有什么想法会导致像这样的崩溃吗?


这是在应用程序更新之后还是在其他更改或突然改变之后发生的?

不,自发布以来,这种情况很少发生。我们目前无法在内部进行复制,只有崩溃报告可以通过。
格雷格

1
didFinish符号可能是一个提示。也许您有某种竞赛条件。也就是说,您的开发人员硬件的运行速度比某些用户的硬件运行速度快,因此您看不到问题的发生。我建议您以某种方式停止硬件,然后查看是否出现问题。如果是这样,从那里进行调试应该很容易。
donjuedo

我认为堆栈跟踪中的符号可能不正确。我刚刚在该应用程序的开发版本中遇到了崩溃,就我使用CLS_LOG记录的面包屑而言,该崩溃看上去是相同的,并且这是与FMDB委托无关的情况,在分配时未将其设置为nil。
格雷格

@Greg对此有更多信息吗?我们在其中一个应用程序中看到了相同的内容。您使用的是ARC吗?
funkybro

Answers:


1

didFinish它看起来像你品牌可能对这一行的竞争条件:

6  CFNetwork                      0x00000001851475a4 __49-[__NSCFLocalSessionTask _task_onqueue_didFinish]_block_invoke + 300

尝试模拟慢速硬件以重现最终用户的状态。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.