FMDBBlockSQLiteCallBackFunction Awaria w aplikacji, która nie używa makeFunctionNamed


102

Pracuję nad aplikacją, która jest w sklepie z aplikacjami, która używa FMDBdo interakcji z bazą danych sqlite. Otrzymaliśmy kilka raportów o awariach ze śladami stosu, takimi jak:

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

Jednak od czytania FMDBkodu wygląda jak FMDBBlockSQLiteCallBackFunctionnazywa się tylko jako zwrotna dla SQLitefunkcji tworzone przy użyciu FMDatabase„s makeFunctionNamed:maximumArguments:withBlock:metody, których nie używamy w ogóle.

Jakieś pomysły, co może powodować takie awarie?


Czy stało się to po aktualizacji aplikacji, po zmianie czegoś innego lub po prostu niespodziewanie?

Nie, dzieje się to sporadycznie od czasu premiery. Nie byliśmy w stanie rozmnażać się w domu i mamy tylko raporty o awariach w tym momencie.
Greg

1
Ten didFinishsymbol może być wskazówką. Być może masz rodzaj rasy. To znaczy, twój sprzęt deweloperski działa szybciej niż część sprzętu twoich użytkowników, więc nie widzisz, że problem występuje. Poleciłbym jakoś ugrzęznąć w swoim sprzęcie i sprawdzić, czy problem się pojawi. Jeśli tak, debugowanie z tego miejsca powinno być łatwe.
donjuedo

Myślę, że symbole w śladzie stosu mogą być nieprawidłowe. Właśnie natknąłem się na awarię w wersji rozwojowej aplikacji, która wygląda identycznie pod względem okruszków, które rejestruję za pomocą CLS_LOG, i był to przypadek, w którym delegat niezwiązany z FMDB nie był ustawiony na zero podczas dealloc.
Greg

@Greg Masz więcej informacji na ten temat? To samo widzimy w jednej z naszych aplikacji. Czy korzystałeś z ARC?
funkybro

Odpowiedzi:


1

W didFinishsprawia, że wyglądają jak ty może mieć stan wyścig na tej linii:

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

Spróbuj emulować powolny sprzęt, aby odtworzyć stan użytkownika końcowego.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.