发布新版本的 iOS 应用程序后,我经常遇到以下崩溃。
崩溃:WebThread EXC_BAD_ACCESS KERN_INVALID_ADDRESS 位于 0x80000012
这是令人恼火的崩溃之一,其中堆栈跟踪没有提供任何与崩溃位置或导致崩溃的原因相关的线索。一件大事是这种崩溃仅在 iOS8 中存在。请在堆栈跟踪下方找到:
0 libobjc.A.dylib objc_msgSend + 5 release
1 CoreFoundation CFRelease + 600
2 QuartzCore CA::release_objects(X::List<void const*>*) + 16
3 QuartzCore -[CAAnimation dealloc] + 54
4 libobjc.A.dylib objc_object::sidetable_release(bool) + 166
5 libobjc.A.dylib (anonymous namespace)::AutoreleasePoolPage::pop(void*) + 404
6 CoreFoundation _CFAutoreleasePoolPop + 16
7 Foundation -[NSAutoreleasePool drain] + 122
8 CFNetwork AutoAutoreleasePool::~AutoAutoreleasePool() + 24
9 CFNetwork ___ZN27URLConnectionClient_Classic18_withDelegateAsyncEPKcU13block_pointerFvP16_CFURLConnectionPK33CFURLConnectionClientCurrent_VMaxE_block_invoke_2 + 166
10 CFNetwork RunloopBlockContext::_invoke_block(void const*, void*) + 60
11 CoreFoundation CFArrayApplyFunction + 36
12 CFNetwork RunloopBlockContext::perform() + 182
13 CFNetwork MultiplexerSource::perform() + 216
14 CFNetwork MultiplexerSource::_perform(void*) + 48
任何提示将不胜感激。提前致谢。
最佳答案
大多数情况下,EXC_BAD_ACCESS
是向已释放的对象发送消息的结果。虽然这在 ARC 下比以前更难做到,但仍有可能。
KERN_INVALID_ADDRESS
部分只是告诉您您尝试访问的内存不属于您应用的内存空间,这证实了已释放对象句柄假设。
要调试以前发布的对象(称为“僵尸”对象),请在调试器中打开 NSZombies。在 XCode 7 中...
- CMD-SHIFT- 调出管理方案。
- 选择您的方案
- 选择
诊断
- 检查
启用僵尸对象
注意:您只想在调试版本上执行此操作,因为僵尸对象会占用大量内存并损害整体性能。尽管如此,它仍然是一个出色的调试工具。
关于objective-c - QuartzCore - 在 iOS8 中崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27597649/