可能是因为 afnetworking 而崩溃了

Posted

技术标签:

【中文标题】可能是因为 afnetworking 而崩溃了【英文标题】:Maybe it crashed because of afnetworking 【发布时间】:2019-01-16 09:13:38 【问题描述】:

我的应用程序再次崩溃,这次导出设备崩溃日志如下(注意文章 11 和 12):

我试图对其进行符号化,但我不知道如何从项目中的 afnetworking 获取 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】:

因此,您的应用程序在 Apple 的代码中崩溃了很深,特别是在 libsystem_malloc 中。虽然我无法确定,但我猜您正在查看堆损坏的示例。

动态分配的内存由您的整个进程以及其中的所有内容共享。这意味着任何代码都可能覆盖和/或以其他方式破坏系统其他部分甚至不相关部分使用的结构。在这种情况下,看起来有些东西弄乱了 malloc 使用的内部簿记结构。我猜想这是通过超出缓冲区并在分配的内存范围之外写入而发生的。

我可以满怀信心地说,这份报告没有提供足够的信息来指责 AFNetworking。当访问损坏的内存时,它恰好不幸运行。即使是一个内存损坏错误也可能导致各种不同的崩溃。因此,实际上不可能推断出任何特定崩溃的原因。

好消息是这种事情很常见。坏消息是很难追踪。我建议尝试使用 Apple 提供的内存调试工具。诸如 NSZombies(通过工具)、guardmalloc 和 malloc scribble 之类的东西。最好的办法是修复所有能找到的与内存相关的错误。

【讨论】:

以上是关于可能是因为 afnetworking 而崩溃了的主要内容,如果未能解决你的问题,请参考以下文章

ios leaks afnetworking3.0多处内存泄露怎么回事

AFNetworking GET 3.0 崩溃

IOS 开发 网络详解--- AF3.0使用

AFNetworking 和 IPV6 拒绝 iOS

AFNetworking [NSNull 长度]

AFNetworking POST 崩溃