【问题标题】:Trying to Fix Crash: QuartzCore - CA::release_objects(X::List<void const*>*)尝试修复崩溃: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: 和某种动画;您找不到并显示该代码吗?

标签: ios crash ios8.1


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2015-01-06
    • 2015-02-20
    • 2018-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-08
    • 1970-01-01
    • 2020-01-18
    相关资源
    最近更新 更多