2011-08-11 54 views
6

由於AVAudioRecorder實例上的方法調用,我正在努力處理拋出異常的底部。我設置了一個異常斷點,但我無法從堆棧跟蹤中收集任何有用的信息。在此拋出異常關鍵是要在通話過程中:在XCode 4中調試異常

[recorder prepareToRecord];

如果我把斷點關閉應用程序運行正常看似沒有任何負面影響。錄像機功能正常。要明確,情況的具體情況並不那麼重要。這更像是一個'在這種情況下我應該怎麼做才能解決問題?'我看不到任何有關手頭工具問題的方法。關於ACBaseCodec的文檔看起來很陳舊,並沒有說明可能導致拋出異常的原因。從調試導航

堆棧跟蹤:

Debug Navigator

堆棧跟蹤從各個螺紋:

enter image description here

有沒有什麼辦法知道是什麼原因造成這個異常?

+0

你能顯示一些代碼嗎?你是否已經檢查了內存管理問題?你說這隻發生在你設置異常斷點時嗎? – jtbandes

+0

我認爲你應該發佈一些代碼,我們可能可以在「來源」幫助 –

回答

1

如果程序在調試器處於活動狀態時失敗,則線程中可能存在競爭條件。 此外,您可能想嘗試將NSZombieEnabled設置爲true或在Instruments中運行程序以查看是否有內存問題導致問題。記錄器對象是否保留?

我看到一些程序崩潰時沒有運行調試程序,但在調試程序處於活動狀態時正常運行,但我從未見過這種情況。

調試器是否記錄任何消息?

0

通過儀器運行。它可能沒有任何問題。如果你沒有收到任何錯誤,你不應該擔心。

9

不幸的是,我認爲AVAudioPlayer和AVAudioRecorder似乎使用C++異常作爲其在prepareTo中的正常處理流程的一部分....所以,如果您在所有異常中啓用中斷,則沒有真正的方法來避免在那裏停止。你可能只是繼續並通過它。另一個可能的解決方法是僅啓用Objective-C異常,因爲它似乎在拋出C++異常。這就是我所做的。對不起,這不是一個答案,爲什麼他們做了prepareTo ...的設計決定超出了我。

+0

感謝您的回覆。我早就放棄嘗試第二次猜測蘋果公司就SDK做出的決定。我有一個偷偷摸摸的懷疑,那就是創建一個人爲的進入門檻,以避免在AppStore上結束太多垃圾。除此之外,你還能解釋在Xcode 4.2中甚至是如何徹底破壞靜態庫的處理? – Undistraction