Может быть, он разбился из-за сети - PullRequest
0 голосов
/ 16 января 2019

Снова произошло сбой моего приложения, на этот раз экспорт журнала сбоя устройства выполнялся следующим образом (см. Статьи 11 и 12):

Я пытался символизировать его, но я не знал, как получить файлы dSYM из сети из проекта.

Thread 8 name:  Dispatch queue: NSOperationQueue 0x2803df960 (QOS: UNSPECIFIED)
Thread 8 Crashed:
0   libsystem_malloc.dylib          0x0000000197cccda8 nanov2_allocate_from_block$VARIANT$armv81 + 528
1   libsystem_malloc.dylib          0x0000000197cccda8 nanov2_allocate_from_block$VARIANT$armv81 + 528
2   libsystem_malloc.dylib          0x0000000197ccc040 nanov2_allocate$VARIANT$armv81 + 140
3   libsystem_malloc.dylib          0x0000000197ccbf64 nanov2_malloc$VARIANT$armv81 + 60
4   libsystem_malloc.dylib          0x0000000197cd99a0 malloc_zone_malloc + 156
5   CoreFoundation                  0x000000019808e160 _CFRuntimeCreateInstance + 324
6   CoreFoundation                  0x000000019802b970 __CFArrayInit + 224
7   Foundation                      0x0000000198b75470 NSKVOCopyPendingNotificationStack + 152
8   Foundation                      0x0000000198b720f8 NSKeyValueWillChangeWithPerThreadPendingNotifications.llvm.16432713543580414412 + 364
9   Foundation                      0x0000000198ae8ad4 -[NSProgress _setValueForKeys:settingBlock:] + 272
10  Foundation                      0x0000000198aeb9dc -[NSProgress setCompletedUnitCount:] + 132
11  AFNetworking                    0x00000001051c965c 0x10519c000 + 185948
12  AFNetworking                    0x00000001051d1a18 0x10519c000 + 219672
13  CFNetwork                       0x0000000198898b94 __67-[NSURLSession delegate_dataTask:didReceiveData:completionHandler:]_block_invoke.303 + 36
14  Foundation                      0x0000000198b8c8bc __NSBLOCKOPERATION_IS_CALLING_OUT_TO_A_BLOCK__ + 16
15  Foundation                      0x0000000198a94ab8 -[NSBlockOperation main] + 72
16  Foundation                      0x0000000198a93f8c -[__NSOperationInternal _start:] + 740
17  Foundation                      0x0000000198b8e790 __NSOQSchedule_f + 272
18  libdispatch.dylib               0x0000000197b356c8 _dispatch_call_block_and_release + 24
19  libdispatch.dylib               0x0000000197b36484 _dispatch_client_callout + 16
20  libdispatch.dylib               0x0000000197b0ce04 _dispatch_continuation_pop$VARIANT$armv81 + 404
21  libdispatch.dylib               0x0000000197b0c4e8 _dispatch_async_redirect_invoke + 592
22  libdispatch.dylib               0x0000000197b18aec _dispatch_root_queue_drain + 344
23  libdispatch.dylib               0x0000000197b1934c _dispatch_worker_thread2 + 116
24  libsystem_pthread.dylib         0x0000000197d1917c _pthread_wqthread + 472
25  libsystem_pthread.dylib         0x0000000197d1bcec start_wqthread + 4

Если это не ошибка сетевого подключения, кто-нибудь может понять, почему? Пожалуйста, помогите мне.

1 Ответ

0 голосов
/ 24 января 2019

Итак, ваше приложение разбилось довольно глубоко в коде Apple, особенно в libsystem_malloc.Хотя я не могу быть уверенным , я предполагаю, что вы смотрите на пример повреждения кучи.

Динамически распределенная память распределяется всем вашим процессом и всем, что в нем.Это означает, что любой код может потенциально перезаписывать и / или иным образом повреждать структуры, используемые другими, даже не связанными, частями системы.В этом случае, похоже, что-то испортило внутренние структуры бухгалтерского учета, используемые malloc.Я полагаю, что это происходит путем переполнения буфера и записи за пределы выделенного участка памяти.

Что я могу сказать с большой уверенностью, так это то, что этот конкретный отчет не дает вам достаточной информации, чтобы обвинить AFNetworking.Просто оказалось, что ему не повезло работать, когда к этой поврежденной памяти обращались.Даже одна ошибка повреждения памяти может привести к различным сбоям.Из-за этого на самом деле невозможно рассуждать о причине какого-либо конкретного сбоя.

Хорошая новость в том, что подобные вещи встречаются очень часто.Плохая новость - это может быть очень трудно отследить.Я бы порекомендовал попробовать использовать инструменты отладки памяти, которые предоставляет Apple.Такие вещи, как NSZombies (через инструменты), guardmalloc и malloc scribble.Лучше всего просто исправить все ошибки, связанные с памятью, которые вы можете найти.

...