尝试修复崩溃:QuartzCore - CA::release_objects(X::List<void const*>*)

Posted

技术标签:

【中文标题】尝试修复崩溃:QuartzCore - CA::release_objects(X::List<void const*>*)【英文标题】:Trying to Fix Crash: QuartzCore - CA::release_objects(X::List<void const*>*) 【发布时间】:2015-02-21 20:16:42 【问题描述】:

我们的应用发生了几次崩溃,想看看你们中是否有人可能有一些见解或有类似的经历。我在下面分享了崩溃日志信息。

运行 ios 8.1。我们已经通过仪器、静态分析仪运行它,但仍在努力找出问题所在。

QuartzCore
CA::release_objects(X::List<void const*>*)

13
Crashed: Thread
EXC_BAD_ACCESS KERN_INVALID_ADDRESS at 0x0042de0f48aa7488


Thread : Crashed: Thread
0  libobjc.A.dylib                0x0000000193debbdc objc_msgSend + 28
1  CoreFoundation                 0x0000000183561228 CFRelease + 524
2  QuartzCore                     0x0000000187788644 CA::release_objects(X::List<void const*>*) +         32
3  QuartzCore                     0x000000018778e498 -[CAAnimation dealloc] + 80
4  libobjc.A.dylib                0x0000000193df1724 (anonymous    namespace)::AutoreleasePoolPage::pop(void*) + 564
5  libobjc.A.dylib                0x0000000193df2754 (anonymous namespace)::AutoreleasePoolPage::tls_dealloc(void*) + 72
6  libsystem_pthread.dylib        0x00000001945fa3e0 _pthread_tsd_cleanup + 200
7  libsystem_pthread.dylib        0x00000001945fa0ac _pthread_exit + 140
8  libsystem_pthread.dylib        0x00000001945fb330 pthread_exit + 44
9  Foundation                     0x0000000184487000 -[NSObject(NSThreadPerformAdditions) performSelectorOnMainThread:withObject:waitUntilDone:]
10 Foundation                     0x0000000184555c24 __NSThread__main__ + 1096
11 libsystem_pthread.dylib        0x00000001945fbe80 _pthread_body + 164
12 libsystem_pthread.dylib        0x00000001945fbddc _pthread_body

【问题讨论】:

参见 CFRelease() - 这意味着 QuartzCore 试图释放一个对象,该对象要么是 nil,要么是之前被释放的。我会尝试在启用 Zombies 的情况下运行您的应用 - 这可能会帮助您找到问题(搜索以获取有关如何启用它的大量建议)。 我已经启用了 Zombies,但不幸的是它并没有太大帮助。 你的意思是“不是很有帮助”?你的意思是听不懂吗?僵尸日志消息实际上说了什么? - 此外,很明显这里有问题的代码涉及performSelectorOnMainThread:withObject:waitUntilDone: 和某种动画;您找不到并显示该代码吗? 【参考方案1】:

这里的问题是,您在 Core Animation 没有预料到的对象上进行了一次额外的发布,因此问题出现在您的代码中,但在动画框架完成其清理阶段时暴露出来。

要解决此问题,请使用 Profiling。选择 Allocations profiler,然后单击 Launch Configuration for Heap Allocations 下的记录引用计数。

那么当遇到问题时,您将能够看到分配历史记录,并且一个版本将不会配对,并且已从您的源代码文件之一发布。

【讨论】:

以上是关于尝试修复崩溃:QuartzCore - CA::release_objects(X::List<void const*>*)的主要内容,如果未能解决你的问题,请参考以下文章

如何修复 Xcode 版本 11.0 测试版画布崩溃?

nvwgf2umx.dll 显卡崩溃问题尝试修复

表 './mysql/proc' 被标记为崩溃,应该修复

修复崩溃的Mysql

未找到 QuartzCore/CAMetalLayer.h 文件

如何修复因 ProGuard/R8 导致的崩溃?