#ios #objective-c #crash-reports
#iOS #objective-c #отчеты о сбоях
Вопрос:
Я использую Fabric для регистрации сбоев в моем приложении iOS. Сегодня я столкнулся с некоторым сбоем, связанным с DiskCookies. Я действительно не знаю, что это значит.
Crashed: diskcookies
0 CoreFoundation 0x1bd00136 CFNotificationCenterPostNotification 53
1 libsystem_malloc.dylib 0x1b5d9cf3 szone_malloc_should_clear 3240
2 CFNetwork 0x1c44a359 DiskCookieStorage::writeFileCompletely0(DiskCookieStorage*, FilePathStat*, MemoryCookies const*, __CFData const*, TracerData*, int) 634
3 CFNetwork 0x1c44a49d DiskCookieStorage::_asyncWriteFileCompletely(void*) 174
4 libdispatch.dylib 0x1b4a1783 _dispatch_client_callout 22
5 libdispatch.dylib 0x1b4ada35 _dispatch_barrier_sync_f_invoke 50
6 CFNetwork 0x1c44b09d DiskCookieStorage::syncStorageWithCompletionLocked(unsigned char, void () block_pointer) 2220
7 CFNetwork 0x1c44277b ___CFHTTPCookieStorageFlushCookieStores_block_invoke 86
8 CoreFoundation 0x1bcf5447 __CFDictionaryApplyFunction_block_invoke 20
9 CoreFoundation 0x1bce0634 CFBasicHashApply 120
10 CoreFoundation 0x1bce94c1 CFDictionaryApplyFunction 152
11 CFNetwork 0x1c44270f _CFHTTPCookieStorageFlushCookieStores 140
12 libsystem_c.dylib 0x1b53720d __cxa_finalize_ranges 290
13 libsystem_c.dylib 0x1b4f61b3 exit 12
14 Comico 0x97a74f UnityGetGLViewController 4756906
15 Comico 0x97a265 UnityGetGLViewController 4755648
16 Comico 0x980a6b UnityGetGLViewController 4782278
17 Comico 0x96dfb5 UnityGetGLViewController 4705808
18 Comico 0x96da59 UnityGetGLViewController 4704436
19 Comico 0x200fe3 -[AppDelegate setUpAppGuardWithUserID:] (AppDelegate.m:1303)
20 Comico 0x1ff967 __36-[AppDelegate dologinInCallLoginAPI]_block_invoke (AppDelegate.m:1026)
21 Comico 0x13f69b __42-[NCLoginRAPIManager loginWithCompletion:]_block_invoke (NCLoginRAPIManager.m:97)
22 Comico 0xde19f -[NCRAPICompletion performBlockWithOperation:] (NCRAPICompletion.m:94)
23 CoreFoundation 0x1bd06323 -[NSArray makeObjectsPerformSelector:withObject:] 218
24 Comico 0x3adf0d -[NCRAPIOperationRegister performCompletionBlockOfOperation:] (NCRAPIOperationRegister.m:67)
25 Comico 0x251ce1 __51-[NCRAPIManager callRAPIWithAPIRequest:completion:]_block_invoke_2 (NCRAPIManager.m:65)
26 libdispatch.dylib 0x1b4a1797 _dispatch_call_block_and_release 10
27 libdispatch.dylib 0x1b4a1783 _dispatch_client_callout 22
28 libdispatch.dylib 0x1b4a5d05 _dispatch_main_queue_callback_4CF 902
29 CoreFoundation 0x1bd8fd69 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ 8
30 CoreFoundation 0x1bd8de19 __CFRunLoopRun 848
31 CoreFoundation 0x1bce11af CFRunLoopRunSpecific 470
32 CoreFoundation 0x1bce0fd1 CFRunLoopRunInMode 104
33 GraphicsServices 0x1d48bb41 GSEventRunModal 80
34 UIKit 0x21069a53 UIApplicationMain 150
35 Comico 0x20dc39 main (main.m:19)
36 libdyld.dylib 0x1b4ce4eb start 2
Я полагаю, что кто-то пытается изменить путь, по которому сетевая библиотека помещает данные. У кого-нибудь есть какая-либо другая теория или есть некоторый опыт в этом сбое?
Ответ №1:
Из трассировки стека, которую вы разместили здесь, моя теория.
- Кадр 14 показывает, что у вас есть приложение Unity, и оно выполняет свою работу под управлением OpenGL.
- Кадр 13 действительно интересен. Похоже, что Unity
UnityGetGLViewController
(который, я полагаю, написан не вами) вызвалexit
. Это удивительное поведение, но оно дает много подсказок для остальной части стека. - Кадры 12-2 выглядят так, как будто сетевой стек просто выполняет некоторую работу при выходе из приложения (запускается
UnityGetGLViewController
). Похоже, что он просто записывает на диск некоторые файлы, связанные с файлами cookie. Я бы не стал беспокоиться об этом. - Фреймы 0 и 1 действительно подозрительны. Мне очень трудно поверить, что malloc вызывает CoreFoundation. Если бы мне пришлось угадывать, я бы сказал, что кадр 0 правильный, а кадр 1 был неправильно обозначен или неправильно размотан.
Это очень необычно для вызова exit
в приложениях iOS. Хотя технически это API, я сомневаюсь, что он тщательно протестирован. Держу пари, что есть некоторые проблемы с зависшим указателем и / или жизненным циклом объекта, связанные с использованием exit
, и вы видите это здесь.
Что я хотел бы сделать, так это посмотреть, есть ли у Unity какая-либо документация по UnityGetGLViewController
вызову exit
. Я бы также проконсультировался с сотрудниками Fabric о кадрах 1 и 0. Я не понимаю, как оба могут быть правильными. И, наконец, я мог бы рассмотреть возможность обнаружения ошибки в Apple. Однако Apple обычно не любит просматривать отчеты о сбоях, не относящиеся к Apple. Итак, последнее, вероятно, маловероятно.