2014-06-17 16 views
12

Mam zgłoszenie tego problemu za pośrednictwem Crashlytics, chociaż nie udało mi się go replikować lokalnie, więc nie mam nic do zrobienia poza wykresem stosu poniżej. Nie jestem pewien, czy odniesienia do CoreLocation w ślad stosu ma cokolwiek z tym wspólnego, ale nie jestem pewien, co może być przyczyną. Mój projekt używa ARC. Jakaś wskazówka?Lokalizacja 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 

Oto inne, prawdopodobnie powiązane.

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

Mam dokładnie ten sam problem i naprawdę nie mogę znaleźć problemu, czy w końcu znalazłeś źródło? – kaal101

+0

Niestety nigdy tak nie było. – Mike

Odpowiedz

2

Miałeś system wysłać wiadomość do złej lokalizacji w pamięci, gdy obiekt powinien być. Moją sugestią jest więc włączenie wykrywania zombie (Edytuj schemat, wybierz zakładkę Diagnostyka, zaznacz obiekty zombie) i ponownie wykonaj scenariusze testowe, w szczególności wszystko, co powoduje zdarzenia CoreLocation.

Następnie, gdy lokalizacja rdzenia wysyła komunikat do zwolnionego obiektu, będzie wiadomo, co obiekt został pierwotnie wydany (ponieważ jest sztucznie utrzymywany przy życiu przez to ustawienie debugowania jako obiekt zombie).

+2

To byłoby łatwe do zrobienia, problem tutaj jest niestety rzadkim błędem, który widziałem tylko przez crashlytics w kompilacji wydania z dziesiątkami tysięcy użytkowników. Nigdy nie byłem w stanie replikować go lokalnie. – Mike

+0

Wystarczająco fair. Chociaż droga nie jest łatwa, jednym z podejść jest sprawienie, by problem pojawiał się częściej. Zasadniczo ustawiasz punkty przerwania w kodzie ze względu na zdarzenia CoreLocation i wypróbowujesz przypadki użycia, aby znaleźć te, które je wyzwalają, np. wyłączenie śledzenia lokalizacji dla aplikacji, a może tylko tworzenie tła/tworzenia planu itd. Następnie wpisz kod testowy, który automatycznie powtarza te kroki, a następnie uruchamia je wielokrotnie i w różnych kombinacjach. Zwiększenie widoczności problemu może dać spostrzeżenia i dostarczyć danych na temat czasu pracy, aby rozwiązać problem. –

+0

Czy sądzisz, że ma to związek ze zmiennym słownikiem? – Mike