2011-07-29 61 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) –