调试Objective-C垃圾收集崩溃的策略

时间:2009-10-25 01:35:43

标签: cocoa garbage-collection osx-leopard powerpc

我有一个非常令人沮丧的崩溃,影响了我的一小部分用户。根据我的分析,似乎与运行10.5的PowerPC用户隔离。当垃圾收集器在后台运行时,它会默默地杀死我的应用程序。这是崩溃日志中的相关片段。

Exception Type:  EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x0000000000000001, 0x0000000093db26f8
Crashed Thread:  1

Application Specific Information:
objc[8361]: garbage collection is ON
test_node_integrity:  FreeListNode 0x1184000 { _prev = 0x0, _next = 0xffffffff, _size = 0 } failed integrity check.
    Thread 0:
0   libSystem.B.dylib               0x95a4c1f8 mach_msg_trap + 8
1   libSystem.B.dylib               0x95a5311c mach_msg + 56
2   com.apple.CoreFoundation        0x96a04394 CFRunLoopRunSpecific + 1812
3   com.apple.HIToolbox             0x9003fb14 RunCurrentEventLoopInMode + 264
4   com.apple.HIToolbox             0x9003f938 ReceiveNextEventCommon + 412
5   com.apple.HIToolbox             0x9003f778 BlockUntilNextEventMatchingListInMode + 84
6   com.apple.AppKit                0x94d18244 _DPSNextEvent + 596
7   com.apple.AppKit                0x94d17bfc -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 112
8   com.apple.AppKit                0x94d1189c -[NSApplication run] + 744
9   com.apple.AppKit                0x94ce2298 NSApplicationMain + 440
10  com.secondgear.checkoff         0x00002e48 start + 64

Thread 1 Crashed:
0   libauto.dylib                   0x93db26f8 Auto::Admin::test_node_integrity(Auto::FreeListNode*) + 392
1   libauto.dylib                   0x93db8dec Auto::Zone::block_deallocate_internal(void*) + 168
2   libauto.dylib                   0x93da80d4 auto_collection_thread(void*) + 148

我一直无法在我的旧PPC Mac上重现崩溃,并且错误的模糊性使得在我的Mac上发生崩溃的地方有些困难。

我可以使用任何调试策略或工具来帮助隔离它吗?也许我可以传递给用户以帮助确定导致崩溃的位置/原因?

1 个答案:

答案 0 :(得分:0)

这通常是由三件事之一引起的;

  • 内存损坏

  • 捆绑卸载

  • 耗尽内存(耗尽地址空间)

奇怪的是它是PPC特定的。确保用户都运行最新版本的操作系统并且意外地在Rosetta下运行您的应用程序(不支持GC)。

您可能还会询问用户的控制台日志。内部可能有更多证据。

除此之外,我没什么可提供的。调试此类问题确实需要在本地计算机上具有可重现的案例,因为除此之外没有太多证据。