gpt4 book ai didi

ios - 无法追踪 [NSData getBytes :length:] crash

转载 作者:可可西里 更新时间:2023-11-01 03:30:29 25 4
gpt4 key购买 nike

我在 Foundation 的 -[NSData(NSData) getBytes:length:] 方法中遇到了一个奇怪的 EXC_BAD_ACCESS 崩溃。它经常发生,但我无法从堆栈跟踪中获取任何有意义的信息。我的代码中没有调用 getBytes:length:,除了开源库(一个在 SDWebImage 中,一个在 SocketRocket 中),但似乎不是他们导致了崩溃。

唯一的提示是崩溃发生在 com.apple.CFNetwork.addPersistCacheToStorageDaemon 线程内,但我不知道它是怎么回事。有人可以帮忙吗?

来自 Crashlytics 的堆栈跟踪:

Thread : Crashed: com.apple.CFNetwork.addPersistCacheToStorageDaemon
0 libsystem_platform.dylib 0x3044a208 _platform_memmove$VARIANT$CortexA9 + 160
1 Foundation 0x22df9167 -[NSData(NSData) getBytes:length:] + 118
2 Foundation 0x22df9167 -[NSData(NSData) getBytes:length:] + 118
3 Foundation 0x22e21a1b -[NSData(NSData) replacementObjectForCoder:] + 134
4 Foundation 0x22dc2aff -[NSXPCEncoder _replaceObject:] + 90
5 Foundation 0x22e240dd -[NSXPCEncoder _encodeArrayOfObjects:forKey:] + 192
6 Foundation 0x22e212ff -[NSDictionary(NSDictionary) encodeWithCoder:] + 922
7 Foundation 0x22dc32c9 -[NSXPCEncoder _encodeObject:] + 604
8 Foundation 0x22dc379d encodeInvocationArguments + 460
9 Foundation 0x22dc3455 -[NSXPCEncoder encodeInvocation:] + 360
10 Foundation 0x22dc32c9 -[NSXPCEncoder _encodeObject:] + 604
11 Foundation 0x22dc2335 -[NSXPCConnection _sendInvocation:proxyNumber:remoteInterface:withErrorHandler:timeout:userInfo:] + 1860
12 Foundation 0x22dd2823 -[NSXPCConnection _sendInvocation:proxyNumber:remoteInterface:withErrorHandler:] + 58
13 Foundation 0x22dd27db -[_NSXPCDistantObjectWithError forwardInvocation:] + 114
14 CoreFoundation 0x2217e831 ___forwarding___ + 352
15 CoreFoundation 0x220afb88 _CF_forwarding_prep_0 + 24
16 CFNetwork 0x21c52ac9 -[NSURLStorage_CacheClient addCachedResponseWithDictionary:key:] + 120
17 CFNetwork 0x21c21e29 ___ZN12__CFURLCache23CreateAndStoreCacheNodeEP16__CFURLCacheNodePK20_CFCachedURLResponsePK10__CFStringPK13_CFURLRequestPKvbRb_block_invoke + 1576
18 libdispatch.dylib 0x302cf423 _dispatch_call_block_and_release + 10
19 libdispatch.dylib 0x302d95d9 _dispatch_queue_drain$VARIANT$mp + 948
20 libdispatch.dylib 0x302d90a9 _dispatch_queue_invoke$VARIANT$mp + 84
21 libdispatch.dylib 0x302db0d3 _dispatch_root_queue_drain + 330
22 libdispatch.dylib 0x302dc1fb _dispatch_worker_thread3 + 106
23 libsystem_pthread.dylib 0x3044ce25 _pthread_wqthread + 668

还有一个(发生频率较低):

Thread : Crashed: com.apple.CFNetwork.addPersistCacheToStorageDaemon
0 libsystem_platform.dylib 0x000000019344d300 _platform_memmove + 176
1 Foundation 0x0000000182dfce18 -[NSData(NSData) getBytes:length:] + 172
2 Foundation 0x0000000182dfce18 -[NSData(NSData) getBytes:length:] + 172
3 Foundation 0x0000000182e2ae3c -[NSData(NSData) replacementObjectForCoder:] + 160
4 Foundation 0x0000000182dbd320 -[NSXPCEncoder _replaceObject:] + 120
5 Foundation 0x0000000182e2dac8 -[NSXPCEncoder _encodeArrayOfObjects:forKey:] + 256
6 Foundation 0x0000000182e2a544 -[NSDictionary(NSDictionary) encodeWithCoder:] + 1016
7 Foundation 0x0000000182dbdd10 -[NSXPCEncoder _encodeObject:] + 716
8 Foundation 0x0000000182dbe2e8 encodeInvocationArguments + 508
9 Foundation 0x0000000182dbdee4 -[NSXPCEncoder encodeInvocation:] + 412
10 Foundation 0x0000000182dbdd10 -[NSXPCEncoder _encodeObject:] + 716
11 Foundation 0x0000000182dbcb0c -[NSXPCConnection _sendInvocation:proxyNumber:remoteInterface:withErrorHandler:timeout:userInfo:] + 2196
12 CoreFoundation 0x0000000181fde230 ___forwarding___ + 440
13 CoreFoundation 0x0000000181ee2b6c _CF_forwarding_prep_0 + 92
14 CFNetwork 0x000000018199c908 ___ZN12__CFURLCache23CreateAndStoreCacheNodeEP16__CFURLCacheNodePK20_CFCachedURLResponsePK10__CFStringPK13_CFURLRequestPKvbRb_block_invoke + 1976
15 libdispatch.dylib 0x00000001932793ac _dispatch_call_block_and_release + 24
16 libdispatch.dylib 0x000000019327936c _dispatch_client_callout + 16
17 libdispatch.dylib 0x00000001932834c0 _dispatch_queue_drain + 1216
18 libdispatch.dylib 0x000000019327c474 _dispatch_queue_invoke + 132
19 libdispatch.dylib 0x0000000193285224 _dispatch_root_queue_drain + 664
20 libdispatch.dylib 0x000000019328675c _dispatch_worker_thread3 + 108
21 libsystem_pthread.dylib 0x00000001934552e4 _pthread_wqthread + 816

最佳答案

随着 iOS 8 的推出,一些意想不到的错误也在发生,我们也必须牢记这一点。

MIT Mobile、Mile point 等应用也遇到了像您这样的问题,虽然目前还没有广泛传播。

这是 MIT 的错误链接& MilePoint .

com.apple.CFNetwork.addPersistCacheToStorageDaemon

CFNetwork 是较低级别的 C API,它被较高级别的类(如 NSURLConnection)包装。

因此崩溃发生在网络操作期间

EXC_BAD_ACCESS

这意味着消息被发送到一个内存地址,那里没有类的实例来执行它。因此导致“访问错误”

什么时候会发生?

  1. 一个对象没有被初始化
  2. 一个对象已经被释放
  3. 其他不太可能发生的事情

我们如何解决这个问题?

  • 您可以通过在 xcode 中启用 NSZombie 来捕获一些错误(编号 2)

启用 NSZombie:

启用此功能后,虚拟对象(僵尸)将保留在每个已释放对象的位置,从而允许调试已释放的对象。非常容易启用:

  1. 在 XCode 的“可执行文件”中双击您的可执行文件
  2. 打开“Arguments”选项卡在“Variables to be set in the environment”中(这是底部的列表,请注意编辑哪个)
  3. 单击“+”按钮,为变量名称输入“NSZombieEnabled”,为值“YES”输入

现在,您不必想知道发生了什么事以及到底是哪个对象产生了问题,您将确切地看到是哪个类是问题制造者,并且您可以非常快速地调试它。

注意:当您将应用程序提交到应用程序商店时,不要启用僵尸程序。此外,如果您真的不需要它们,最好禁用它们。

  • 如果您正在使用第三方库,请将其更新到最新

注意:

我的建议是除非不可避免,否则永远不要使用第三方框架,因为库本身有时会存在开发人员无法控制的错误,有时库会延迟更新到当前 SDK。您可以找到更多相关信息 here

希望对你有帮助

关于ios - 无法追踪 [NSData getBytes :length:] crash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28949799/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com