2011-07-29 62 views
4

我试图调试我的应用崩溃的原因。从我的试用中,我意识到在某个地方,有泄漏,我正在排除。我知道它,因为当我尝试使用这种方法调试here时,它最终会崩溃,因为看起来内存泄漏在一段时间后会膨胀。如何理解XCode 4上的崩溃日志

为了找出原因,我现在在XCode 4上打开NSZombieEnabled为YES。但是我没有看到任何东西。所以现在我转向崩溃日志。这里是:

Thread 7 Crashed: 
0 libsystem_kernel.dylib   0x31b71a1c __pthread_kill + 8 
1 libsystem_c.dylib    0x35ceb3b4 pthread_kill + 52 
2 libsystem_c.dylib    0x35ce3bf8 abort + 72 
3 libsystem_c.dylib    0x35d1f024 free + 104 
4 ImageIO       0x32ca35f0 ImageProviderReleaseInfoCallback + 56 
5 CoreGraphics     0x31a05284 image_provider_finalize + 8 
6 CoreFoundation     0x35aad288 _CFRelease + 160 
7 CoreFoundation     0x35aad1ae CFRelease + 82 
8 CoreGraphics     0x319fe150 CGImageProviderRelease + 4 
9 CoreGraphics     0x31a00bac CGImageBlockSetRelease + 44 
10 CoreGraphics     0x31a00b70 img_blocks_destroy + 8 
11 CoreGraphics     0x319fdaae CGSImageDataUnlock + 26 
12 libRIP.A.dylib     0x309eebae ripc_ReleaseImage + 374 
13 libRIP.A.dylib     0x309ecc9c ripc_DrawImage + 536 
14 CoreGraphics     0x319f9284 CGContextDelegateDrawImage + 44 
15 CoreGraphics     0x319f9142 CGContextDrawImage + 250 
16 myapp       0x000c6a28 0x45000 + 530984 
17 myapp       0x000c6d6a 0x45000 + 531818 
18 myapp       0x000c681c 0x45000 + 530460 
19 myapp       0x000c3526 0x45000 + 517414 
20 myapp       0x000c3796 0x45000 + 518038 
21 Foundation      0x33486382 -[NSThread main] + 38 
22 Foundation      0x334f85c6 __NSThread__main__ + 966 
23 libsystem_c.dylib    0x35ceb30a _pthread_start + 242 
24 libsystem_c.dylib    0x35cecbb4 thread_start + 0 

我的问题:有没有关于如何阅读和理解这个调试日志的任何提示?也许一个链接或书籍涵盖了如何一起调试。谢谢。

+0

威利,你有没有找到这次事故的原因? – Jason

+0

是的,我试图访问一个以前发布的对象。 – Willy

+0

谢谢,我得到了同样的崩溃,所以我在UIImage中添加了保留/释放,我正在绘制希望能够帮助它。 – Jason

回答

7

在这种情况下,

2 libsystem_c.dylib    0x35ce3bf8 abort + 72 
3 libsystem_c.dylib    0x35d1f024 free + 104 

自由功能检测到的释放地址不在堆或无效,然后调用abort函数的范围内。

Technical Note TN2239 - iOS Debugging Magic”是相当有用的文件。请查看“Memory Allocator”并使用NSZombieEnabled等Malloc *环境。设置断点以中止函数对于获取用于释放和跟踪堆栈的参数也很有用。

+0

感谢您的回答!顺便说一句,它将是有用的学习调试C调试目标C上的一些代码? – Willy

+0

是的,C调试知识可以帮助您调试Objective-C。实际上,编译器将Objective-C代码编译为纯C语言。 [Objective-C运行时参考](http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ObjCRuntimeRef/Reference/reference.html) –