Збій FMDBBlockSQLiteCallBackFunction в додатку, який не використовує makeFunctionNamed


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функцій створюється з допомогою FMDatabase«s makeFunctionNamed:maximumArguments:withBlock:методу, який ми не використовуємо взагалі.

Будь-які ідеї, що може спричинити збої, як це?


Це сталося після оновлення програми або після того, як щось інше змінилося або просто не помітило?

Ні, це відбувається спорадично з моменту запуску. Нам не вдалося відтворити вдома, і лише ми маємо на цьому етапі повідомлення про аварії.
Грег

1
Цей didFinishсимвол може бути натяком. Можливо, у вас є сорти перегонів. Тобто, апаратне забезпечення вашого розробника працює швидше, ніж обладнання деяких користувачів, тому ви не бачите проблеми. Я б рекомендував якось перемикати обладнання та побачити, чи проблема з’являється у вас. Якщо так, налагодження звідти має бути простим.
donjuedo

Я думаю, що символи в сліді стека можуть бути неправильними. Щойно я зіткнувся з аварією в розробці програми, яка виглядає ідентично з точки зору, яку я реєструю за допомогою CLS_LOG, і це було випадком, коли делегат FMDB, який не має відношення, не налаштований на нуль у dealloc.
Грег

@Greg Будь-яка інформація про це? Ми бачимо те саме в одному з наших додатків. Ви використовували ARC?
funkybro

Відповіді:


1

Це didFinishробить його схожим, що у вас може бути стан перегонів на цій лінії:

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

Спробуйте наслідувати повільне обладнання для відтворення стану кінцевого користувача.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.