2015-06-08 16 views
101

Sto lavorando a un'app nell'app store, che utilizza FMDB per interagire con il suo database sqlite. Abbiamo ricevuto alcune segnalazioni di crash con tracce dello stack in questo modo:FMDBBlockSQLiteCallBackFunction Crash nell'app che non utilizza makeFunctionNamed

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 

Tuttavia, dalla lettura del codice FMDB sembra FMDBBlockSQLiteCallBackFunction viene chiamato solo come callback per SQLite funzioni creati utilizzando makeFunctionNamed:maximumArguments:withBlock: metodo, s FMDatabase' che abbiamo Non sto usando affatto.

Qualche idea che cosa potrebbe causare arresti anomali come questo?

+0

Ciò è accaduto dopo un aggiornamento dell'app o dopo che qualcos'altro è stato modificato o semplicemente inaspettatamente? –

+0

No, questo è accaduto sporadicamente dal lancio. Non siamo stati in grado di riprodurre in casa e abbiamo solo i rapporti sugli arresti anomali da seguire a questo punto. – Greg

+1

Il simbolo 'didFinish' potrebbe essere un suggerimento. Forse hai una specie di condizione di gara. Ad esempio, l'hardware dello sviluppatore funziona più velocemente dell'hardware di alcuni utenti, quindi non si verifica il problema. Ti consiglio di impacchettare il tuo hardware in qualche modo e vedere se il problema appare per te. Se è così, il debug da lì dovrebbe essere facile. – donjuedo

risposta

1

Il didFinish fa apparire come si può avere una condizione di competizione su questa linea:

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

cercare di emulare l'hardware lento di riprodurre lo stato dell'utente finale.

Problemi correlati