FMDBBlockSQLiteCallBackFunction Absturz in einer App, die makeFunctionNamed nicht verwendet

102

Ich arbeite an einer App im App Store, die FMDBfür die Interaktion mit der SQLite-Datenbank verwendet wird. Wir haben einige Absturzberichte mit folgenden Stapelspuren erhalten:

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

Nach dem Lesen des FMDBCodes wird es FMDBBlockSQLiteCallBackFunctionjedoch nur als Rückruf für SQLiteFunktionen aufgerufen, die mit FMDatabaseder makeFunctionNamed:maximumArguments:withBlock:Methode von ' erstellt wurden , die wir überhaupt nicht verwenden.

Irgendwelche Ideen, was solche Abstürze verursachen könnte?

Greg
quelle
Ist dies nach einem App-Update oder nachdem etwas anderes geändert wurde oder aus heiterem Himmel passiert ist?
Nein, dies ist seit dem Start sporadisch geschehen. Wir konnten uns nicht im eigenen Haus reproduzieren und haben nur die Absturzberichte, die zu diesem Zeitpunkt vorliegen.
Greg
1
Dieses didFinishSymbol kann ein Hinweis sein. Vielleicht haben Sie eine Art Rennbedingung. Das heißt, Ihre Entwicklerhardware läuft schneller als die Hardware einiger Benutzer, sodass das Problem nicht auftritt. Ich würde empfehlen, Ihre Hardware irgendwie zu blockieren und zu prüfen, ob das Problem bei Ihnen auftritt. In diesem Fall sollte das Debuggen von dort aus einfach sein.
Donjuedo
Ich denke, die Symbole in der Stapelverfolgung sind möglicherweise falsch. Ich bin gerade auf einen Absturz in einem Entwicklungs-Build der App gestoßen, der in Bezug auf die Breadcrumbs, die ich mit CLS_LOG protokolliere, identisch aussieht, und es war ein Fall, in dem ein nicht mit FMDB zusammenhängender Delegierter bei Dealloc nicht auf Null gesetzt wurde.
Greg
@ Greg Noch mehr Informationen dazu? Wir sehen dasselbe in einer unserer Apps. Haben Sie ARC verwendet?
Funkybro

Antworten:

1

Das didFinishlässt es so aussehen, als ob Sie eine Rennbedingung auf dieser Linie haben könnten:

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

Versuchen Sie, langsame Hardware zu emulieren, um den Status des Endbenutzers zu reproduzieren.

Kirk Strobeck
quelle