我的應用程序最近開始顯示奇怪的崩潰,我無法追蹤到源。怎樣尋找會有幫助:)從設備(在iOS 5新iPad)如何在AQClient線程中查找iPad應用程序的奇怪崩潰?
崩潰日誌任何幫助顯示在開始下面的東西:
Date/Time: 2011-11-08 19:07:21.044 +0100
OS Version: iPhone OS 5.0 (9A334)
Report Version: 104
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x406cad3d
Crashed Thread: 9
墜毀的螺紋9是AQClient
線程它的堆棧跟蹤如下所示:
Thread 9 name: AQClient
Thread 9 Crashed:
0 libobjc.A.dylib 0x30107fbc objc_msgSend + 16
1 AVFoundation 0x3420cdc8 _ZL27AudioPlayerAQOutputCallbackPvP16OpaqueAudioQueueP16AudioQueueBuffer + 28
2 AudioToolbox 0x32a409fe ClientMessageHandler::OutputBufferComplete(unsigned int) + 98
3 AudioToolbox 0x32a425d6 AQClientCallbackMessageReader::DispatchCallbacks(unsigned char*, unsigned int, void*, unsigned int) + 198
4 AudioToolbox 0x32a408dc AQCallbackReceiver_CallbackNotificationsAvailable + 364
5 AudioToolbox 0x329ee4b6 _XCallbackNotificationsAvailable + 54
6 AudioToolbox 0x329e436c mshMIGPerform + 368
7 CoreFoundation 0x34fa454c __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 32
8 CoreFoundation 0x34fa44ee __CFRunLoopDoSource1 + 134
9 CoreFoundation 0x34fa333c __CFRunLoopRun + 1364
10 CoreFoundation 0x34f264d6 CFRunLoopRunSpecific + 294
11 CoreFoundation 0x34f2639e CFRunLoopRunInMode + 98
12 AudioToolbox 0x32a3d29c GenericRunLoopThread::Entry(void*) + 116
13 AudioToolbox 0x329c5aac CAPThread::Entry(CAPThread*) + 208
14 libsystem_c.dylib 0x35756c16 _pthread_start + 314
15 libsystem_c.dylib 0x35756ad0 thread_start + 0
這似乎與AVAudioPlayer或MPMoviePlayer活動有關。在應用程序中,我有一部電影正在播放(應用程序包中的.m4v),然後當它完成時,視圖翻轉到沒有電影和音頻開始播放的一側。
在發生崩潰的情況下,我可以聽到的是相同的音頻播放兩次,即使它沒有打算。然後,在完成音頻(當AVAudioPlayer應該被釋放時),應用程序崩潰。
我添加了一些NSLog
s到應用程序來追查這裏發生了什麼。在臨界點的控制檯給我這樣一件事:
Nov 8 19:17:19 unknown XXX[1753] <Warning>: Finished movie
Nov 8 19:17:19 unknown XXX[1753] <Warning>: Finished movie
Nov 8 19:17:20 unknown XXX[1753] <Warning>: flipping
Nov 8 19:17:20 unknown XXX[1753] <Warning>: flipping
Nov 8 19:17:20 unknown XXX[1753] <Warning>: --> dealloc <AVAudioPlayer: 0x6887530> (d2_s3_l3_q9.aif)
Nov 8 19:17:20 unknown XXX[1753] <Warning>: --> dealloc <AVAudioPlayer: 0x6887530> (d2_s3_l3_q9.aif)
Nov 8 19:17:20 unknown UIKitApplication:com.bundle.name[0x2432][1753] <Notice>: objc[1753]: Object 0x68859f0 of class __NSCFString autoreleased with no pool in place - just leaking - break on objc_autoreleaseNoPool() to debug
Nov 8 19:17:20 unknown UIKitApplication:com.bundle.name[0x2432][1753] <Notice>: objc[1753]: Object 0x11ef30 of class __NSCFString autoreleased with no pool in place - just leaking - break on objc_autoreleaseNoPool() to debug
Nov 8 19:17:20 unknown UIKitApplication:com.bundle.name[0x2432][1753] <Notice>: objc[1753]: Object 0x1a6720 of class __NSCFString autoreleased with no pool in place - just leaking - break on objc_autoreleaseNoPool() to debug
Nov 8 19:17:20 unknown UIKitApplication:com.bundle.name[0x2432][1753] <Notice>: objc[1753]: Object 0x6872400 of class __NSCFString autoreleased with no pool in place - just leaking - break on objc_autoreleaseNoPool() to debug
(...)
Nov 8 19:17:20 unknown UIKitApplication:com.bundle.name[0x2432][1753] <Notice>: objc[1753]: Object 0x6872ed0 of class __NSCFDictionary autoreleased with no pool in place - just leaking - break on objc_autoreleaseNoPool() to debug
Nov 8 19:17:20 unknown UIKitApplication:com.bundle.name[0x2432][1753] <Notice>: objc[1753]: Object 0x10cf80 of class __NSCFNumber autoreleased with no pool in place - just leaking - break on objc_autoreleaseNoPool() to debug
Nov 8 19:17:20 unknown UIKitApplication:com.bundle.name[0x2432][1753] <Notice>: objc[1753]: Object 0x6850480 of class __NSCFString autoreleased with no pool in place - just leaking - break on objc_autoreleaseNoPool() to debug
Nov 8 19:17:20 unknown UIKitApplication:com.bundle.name[0x2432][1753] <Notice>: objc[1753]: Object 0x10a530 of class __NSCFNumber autoreleased with no pool in place - just leaking - break on objc_autoreleaseNoPool() to debug
Nov 8 19:17:20 unknown UIKitApplication:com.bundle.name[0x2432][1753] <Notice>: objc[1753]: Object 0x1d15d0 of class __NSCFNumber autoreleased with no pool in place - just leaking - break on objc_autoreleaseNoPool() to debug
Nov 8 19:17:20 unknown UIKitApplication:com.bundle.name[0x2432][1753] <Notice>: objc[1753]: Object 0x6884550 of class TFCrashHandler autoreleased with no pool in place - just leaking - break on objc_autoreleaseNoPool() to debug
Nov 8 19:17:20 unknown UIKitApplication:com.bundle.name[0x2432][1753] <Notice>: objc[1753]: Object 0x685ec10 of class __NSCFString autoreleased with no pool in place - just leaking - break on objc_autoreleaseNoPool() to debug
Nov 8 19:17:20 unknown UIKitApplication:com.bundle.name[0x2432][1753] <Notice>: objc[1753]: Object 0x6856270 of class __NSCFDictionary autoreleased with no pool in place - just leaking - break on objc_autoreleaseNoPool() to debug
Nov 8 19:17:21 unknown com.apple.networkd[1763] <Notice>: main:212 networkd.1763 built Sep 16 2011 00:02:59
Nov 8 19:17:25 unknown ReportCrash[1764] <Notice>: Formulating crash report for process XXX[1753]
Nov 8 19:17:25 unknown com.apple.launchd[1] <Warning>: (UIKitApplication:com.bundle.name[0x2432]) Job appears to have crashed: Segmentation fault: 11
Nov 8 19:17:25 unknown SpringBoard[15] <Warning>: Application 'XXX' exited abnormally with signal 11: Segmentation fault: 11
Nov 8 19:17:25 unknown ReportCrash[1764] <Error>: Saved crashreport to /var/mobile/Library/Logs/CrashReporter/XXX_2011-11-08-191724_iKotapad.plist using uid: 0 gid: 0, synthetic_euid: 501 egid: 0
編輯:
這裏的關鍵部分,我想,是在開始翻倍日誌。當沒有崩潰時,它只顯示一次。而且,問題可能來自調用同一個對象的dealloc
方法兩次。
這似乎是與非主線程中的自動釋放池問題,因爲我不在這個應用程序中做任何多線程的事情,我不使用後臺任務 - 我認爲這可能是一個問題,而不是我的問題碼... – kender
我想知道如果這可能與我在我的代碼中使用非原子屬性有關。也許這可能會導致對變量的雙重訪問? – kender
控制檯似乎表明啓動音頻的代碼運行了兩次,但是引用了相同的對象,這在對應時間釋放它之前效果很好。即使您認爲這是唯一的地方,也可以評論您開始播放音頻的地點之一,並查看它是否會被調用兩次。在電影結尾處觸發的事件有可能被調用兩次,因此音頻開始兩次結果 - 嘗試添加布爾標誌以確保音頻開始例程只運行一次。 – Tim