2011-10-12 85 views
0
#0 0x345bbc98 in objc_msgSend() 
#1 0x35cd3616 in -[_PFManagedObjectReferenceQueue _processReferenceQueue:]() 
#2 0x35cd32b2 in _performRunLoopAction() 
#3 0x31458a34 in __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__() 
#4 0x3145a464 in __CFRunLoopDoObservers() 
#5 0x3145b75a in __CFRunLoopRun() 
#6 0x313ebec2 in CFRunLoopRunSpecific() 
#7 0x313ebdca in CFRunLoopRunInMode() 
#8 0x354d941e in GSEventRunModal() 
#9 0x354d94ca in GSEventRun() 
#10 0x36a03d68 in -[UIApplication _run]() 
#11 0x36a01806 in UIApplicationMain() 
#12 0x00002b6a in main (argc=1, argv=0x2fdff494) at /Projects/iOS_Universal/main.m:14 

我怎樣才能知道哪些對象是overrelease.I有NSZombieEnabled運行我的應用程序也嘗試了一些GDB的命令,但沒有得到任何幫助指南需要調試崩潰日誌

回答

0

這是由於來自兩個不同線程的核心數據db的併發訪問,即主線程&後臺線程

0

添加在異常斷點(Xcode的4這很容易)然後重新運行並崩潰你的應用程序。很有可能你會在發生崩潰的時候獲得一個突破點。從那裏你可以得到各種對象,直到你觸及導致調試器投訴的那個對象。

如果你已經NSZombieEnabled,它不是在overrelease拋出一個異常,那麼你可能只訪​​問一個釋放的對象。最好的預防是nil你發佈的任何對象。

1

MallocStackLogging,並在調試guard malloc。然後,當你的應用程序崩潰,在gdb的控制檯輸入:

(gdb) info malloc-history 0x543216 

替換0x543216與導致崩潰的對象的地址,你會得到一個更加有用的堆棧跟蹤,它應該幫助你查明導致問題的代碼中的確切行。