FMDBBlockSQLiteCallBackFunction Crash di aplikasi yang tidak menggunakan makeFunctionNamed

102

Saya sedang mengerjakan aplikasi yang ada di toko aplikasi, yang digunakan FMDBuntuk berinteraksi dengan database sqlite-nya. Kami telah menerima beberapa laporan kerusakan dengan jejak tumpukan seperti ini:

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

Namun, dari membaca FMDBkode sepertinya FMDBBlockSQLiteCallBackFunctionhanya disebut sebagai callback untuk SQLitefungsi dibuat menggunakan FMDatabase's makeFunctionNamed:maximumArguments:withBlock:metode, yang kita tidak menggunakan sama sekali.

Adakah ide apa yang bisa menyebabkan crash seperti ini?

Greg
sumber
Apakah ini terjadi setelah pembaruan aplikasi atau setelah sesuatu yang lain berubah atau tiba-tiba?
Tidak, ini telah terjadi secara sporadis sejak diluncurkan. Kami belum dapat mereproduksi di rumah, dan hanya memiliki laporan kerusakan untuk disampaikan pada saat ini.
Greg
1
Itu didFinishsimbol mungkin petunjuk. Mungkin Anda memiliki semacam kondisi ras. Yaitu, perangkat keras pengembang Anda berjalan lebih cepat daripada beberapa perangkat keras pengguna Anda, jadi Anda tidak melihat masalah terjadi. Saya akan merekomendasikan untuk menghentikan perangkat keras Anda, dan lihat apakah masalahnya muncul untuk Anda. Jika demikian, debugging dari sana seharusnya mudah.
donjuedo
Saya pikir simbol dalam pelacakan tumpukan mungkin salah. Saya baru saja menemukan crash dalam build pengembangan aplikasi yang terlihat identik dalam hal remah roti yang saya catat dengan CLS_LOG, dan itu adalah kasus yang tidak terkait dengan delegasi FMDB yang tidak disetel ke nihil pada dealloc.
Greg
@Greg Ada informasi lebih lanjut tentang ini? Kami melihat hal yang sama di salah satu aplikasi kami. Apakah Anda menggunakan ARC?
funkybro

Jawaban:

1

The didFinishmerek terlihat seperti Anda mungkin memiliki kondisi balapan di baris ini:

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

Cobalah untuk meniru perangkat keras yang lambat untuk mereproduksi keadaan pengguna akhir.

Kirk Strobeck
sumber