2014-06-17 18 views
12

Ho segnalato questo problema tramite Crashlytics, anche se non sono stato in grado di replicarlo localmente, quindi non ho altro da aggiungere alla traccia dello stack qui sotto. Non sono sicuro se i riferimenti a CoreLocation nel lo stack trace ha qualcosa a che fare con esso, ma non sono sicuro di quale possa essere la causa. Il mio progetto sta usando ARC. Qualche indizio?Posizione iOS Crash Core CFBasicHashCreateCopy?

Thread : Crashed: com.apple.CoreLocation.ConnectionClient.0x14eb3510.events 
0 CoreFoundation     0x307769a8 CFBasicHashCreateCopy + 712 
1 libobjc.A.dylib    0x3afd1a19 object_setClass + 24 
2 CoreFoundation     0x30782d0f CFDictionaryCreateMutableCopy + 154 
3 CoreLocation     0x30d0a8f3 CLLocationCoordinate2DGetDistanceFrom + 47590 
4 CoreLocation     0x30d2d607 CLClientCreateIso6709Notation + 49626 
5 CoreFoundation     0x30786d45 __CFDictionaryApplyFunction_block_invoke + 16 
6 CoreFoundation     0x30772cd4 CFBasicHashApply + 128 
7 CoreFoundation     0x3077be27 CFDictionaryApplyFunction + 154 
8 CoreLocation     0x30d2cc25 CLClientCreateIso6709Notation + 47096 
9 CoreLocation     0x30d2b625 CLClientCreateIso6709Notation + 41464 
10 libxpc.dylib     0x3b5fc3a9 _xpc_connection_call_event_handler + 40 
11 libxpc.dylib     0x3b5fee67 do_mach_notify_port_destroyed + 122 
12 libxpc.dylib     0x3b5fedd1 _Xmach_notify_port_destroyed + 104 
13 libxpc.dylib     0x3b5fed47 notify_server + 62 
14 libxpc.dylib     0x3b5fa9cf _xpc_connection_mach_event + 1926 
15 libdispatch.dylib    0x3b4bdf43 _dispatch_mach_msg_invoke + 118 
16 libdispatch.dylib    0x3b4c0c71 _dispatch_queue_drain + 412 
17 libdispatch.dylib    0x3b4bda6b _dispatch_mach_invoke + 78 
18 libdispatch.dylib    0x3b4c0c71 _dispatch_queue_drain + 412 
19 libdispatch.dylib    0x3b4bdc6f _dispatch_queue_invoke + 42 
20 libdispatch.dylib    0x3b4c0c71 _dispatch_queue_drain + 412 
21 libdispatch.dylib    0x3b4bdc6f _dispatch_queue_invoke + 42 
22 libdispatch.dylib    0x3b4c15f1 _dispatch_root_queue_drain + 76 
23 libdispatch.dylib    0x3b4c18dd _dispatch_worker_thread2 + 56 
24 libsystem_pthread.dylib  0x3b5ecc17 _pthread_wqthread + 298 

Ecco un altro, probabilmente correlato.

Crashed: com.apple.CoreLocation.ConnectionClient.0x17665330.events 
EXC_BAD_ACCESS KERN_INVALID_ADDRESS at 0x11755e44 

Thread : Crashed: com.apple.CoreLocation.ConnectionClient.0x17665330.events 
0 libobjc.A.dylib    0x381db626 objc_msgSend + 5 
1 CoreFoundation     0x2d979d75 CFDictionaryCreateMutableCopy + 320 
2 CoreLocation     0x2df018f3 (null) + 47590 
3 CoreLocation     0x2df24607 (null) + 49626 
4 CoreFoundation     0x2d97dd05 __CFDictionaryApplyFunction_block_invoke + 16 
5 CoreFoundation     0x2d969c94 CFBasicHashApply + 128 
6 CoreFoundation     0x2d972de7 CFDictionaryApplyFunction + 154 
7 CoreLocation     0x2df23c25 (null) + 47096 
8 CoreLocation     0x2df22625 (null) + 41464 
9 libxpc.dylib     0x387fb3a9 _xpc_connection_call_event_handler + 40 
10 libxpc.dylib     0x387fde67 do_mach_notify_port_destroyed + 122 
11 libxpc.dylib     0x387fddd1 _Xmach_notify_port_destroyed + 104 
12 libxpc.dylib     0x387fdd47 notify_server + 62 
13 libxpc.dylib     0x387f99cf _xpc_connection_mach_event + 1926 
14 libdispatch.dylib    0x386bcf43 _dispatch_mach_msg_invoke + 118 
15 libdispatch.dylib    0x386bfc71 _dispatch_queue_drain + 412 
16 libdispatch.dylib    0x386bca6b _dispatch_mach_invoke + 78 
17 libdispatch.dylib    0x386bfc71 _dispatch_queue_drain + 412 
18 libdispatch.dylib    0x386bcc6f _dispatch_queue_invoke + 42 
19 libdispatch.dylib    0x386bfc71 _dispatch_queue_drain + 412 
20 libdispatch.dylib    0x386bcc6f _dispatch_queue_invoke + 42 
21 libdispatch.dylib    0x386c05f1 _dispatch_root_queue_drain + 76 
22 libdispatch.dylib    0x386c08dd _dispatch_worker_thread2 + 56 
23 libsystem_pthread.dylib  0x387ebc17 _pthread_wqthread + 298 
+0

Ho esattamente lo stesso problema e davvero non riesco a trovare il problema, hai finalmente trovato la fonte? – kaal101

+0

Purtroppo non l'ha mai fatto. – Mike

risposta

2

Il sistema ha inviato un messaggio a una posizione di memoria non valida in cui un oggetto avrebbe dovuto essere. Quindi il mio suggerimento è di abilitare il rilevamento degli zombi (Modifica schema, quindi selezionare la scheda Diagnostica, spuntare abilita oggetti zombi) e ri-fare gli scenari di test in particolare qualsiasi cosa che causi eventi di CoreLocation.

Quindi quando la posizione di nucleo invia un messaggio a un oggetto rilasciato, si saprà quale oggetto originariamente è stato rilasciato (perché è mantenuto artificialmente in vita da questa impostazione di debug come oggetto zombi).

+2

Questo sarebbe facile da fare, il problema qui purtroppo è un bug raro che ho visto solo attraverso crashlytics in una build di rilascio con decine di migliaia di utenti. Non sono mai stato in grado di replicarlo localmente. – Mike

+0

Abbastanza giusto. Sebbene non sia una strada facile, un approccio è far apparire il problema più frequentemente. In sostanza, si impostano i punti di interruzione nel codice a causa degli eventi di CoreLocation e si provano i casi d'uso per trovare quelli che possono attivarli, ad es. disabilitando il rilevamento della posizione per l'app, o magari semplicemente facendo il backgrounding/foregrounding, ecc. Quindi scrivi il codice di test che ripete questi passaggi automaticamente e poi fallo funzionare ripetutamente e in combinazioni diverse. Rendere un problema più esposto può dare approfondimenti e può fornire dati di runtime per risolvere il problema. –

+0

Pensi che questo abbia a che fare con un dizionario mutevole? – Mike