垃圾收集的核心数据程序中的奇怪崩溃

Posted

技术标签:

【中文标题】垃圾收集的核心数据程序中的奇怪崩溃【英文标题】:strange crash in garbage-collected Core Data program 【发布时间】:2010-11-07 02:10:51 【问题描述】:

我有一个垃圾收集的 CoreData 应用程序,我的一些朋友正在使用它。这是一个相当标准的应用程序,其中核心数据条目显示在表格视图中。

其中一些报告了以下神秘的崩溃报告,这些报告是由表格视图的排序标准的更改触发的。

Application Specific Information:
objc_msgSend() selector name: objCType
objc[1415]: garbage collection is ON

Thread 0 Crashed:  Dispatch queue: com.apple.main-thread
0   libobjc.A.dylib                 0x00007fff885bf10a objc_msgSend + 22
1   com.apple.Foundation            0x00007fff82a80f91 -[NSNumber compare:] + 102
2   com.apple.Foundation            0x00007fff82aa9c9a _NSCompareObject + 75
3   com.apple.Foundation            0x00007fff82ae1ab9 _NSSortFunctionMany + 626
4   com.apple.CoreFoundation        0x00007fff87f24419 __CFSimpleMergeSort + 409
5   com.apple.CoreFoundation        0x00007fff87f242d8 __CFSimpleMergeSort + 88
....
15  com.apple.CoreFoundation        0x00007fff87f242d8 __CFSimpleMergeSort + 88
16  com.apple.CoreFoundation        0x00007fff87f240cd CFSortIndexes + 317
17  com.apple.CoreFoundation        0x00007fff87f56a23 CFMergeSortArray + 147
18  com.apple.Foundation            0x00007fff82aa99f3 _sortedObjectsUsingDescriptors + 572
19  com.apple.Foundation            0x00007fff82ae162a -[NSMutableArray(NSKeyValueSorting) sortUsingDescriptors:] + 440
20  com.apple.AppKit                0x00007fff84f06ad8 -[NSArrayController _sortObjects:] + 337
21  com.yujitach.spires             0x00000001000225e0 -[IncrementalArrayController arrangeObjects:] + 194

这里,IncrementalArrayControllerNSArrayController 的子类。我不明白为什么从 CoreData 返回的 Objective-C 数组的 arrangeObjects: 会导致崩溃。

这与我的程序的多线程性有关吗?我遵循文档所说的:每个线程一个 MOC,并且我不跨线程传递托管对象,只传递托管对象 ID。

如果有人能建议我如何调试它,我将不胜感激。例如我想看看是哪个对象导致了objc_msgSend 上的崩溃。我怎样才能找到它?

如果你需要源代码,可以通过bzr获得:

$ bzr branch http://www.sns.ias.edu/~yujitach/spires/code/

【问题讨论】:

【参考方案1】:

10.6 的早期版本中存在一个错误,涉及在垃圾收集应用程序中对非常大的数组进行排序。修复正在更新中。

【讨论】:

你的意思是在即将到来的更新中?此错误在 10.6.4 上。希望修复在 10.6.5 ...

以上是关于垃圾收集的核心数据程序中的奇怪崩溃的主要内容,如果未能解决你的问题,请参考以下文章

确定JVM垃圾收集器的运行时

Android 高级分析在自动垃圾收集期间崩溃

java垃圾是怎么回收的,回收算法

大数据必学Java基础:Java核心机制

Python:垃圾收集器的行为

垃圾回收简介