2012-01-23 50 views
0

當我嘗試執行某些操作時(例如調用一個不存在或嘗試的方法),當我崩潰時(出於我理解的原因;這不是問題)要將nil插入到集合中,調試器會顯示從main()到__pthread_kill的堆棧,而不會在實際崩潰代碼運行時出現任何幀。有一個叫做objc_exception_rethrow的框架(從main組成的第9個框架)。這導致我相信Cocoa Touch正在嘗試做某些事情來恢復所有異常並優雅地死去。但是,調試時無法真正使用Xcode4的調試工具來調查調用堆棧幀,甚至看不到我崩潰的代碼中的位置,這是非常令人惱火的。NSException在調試器中重新拋出錯誤的堆棧

是否有某種方法可以使objc_exception_rethrow行爲不發生,並且只要引發異常就會崩潰?也許有一個調試設置,使它更早崩潰(在權利時間)? (我還沒有搞亂這個項目中的任何構建設置。)

回答

0

我找到了答案:在Obj-C Exceptions上設置一個斷點。它會在objc_exception_throw命中時進入調試器,這很好。不幸的是,這種情況發生在打印異常之前,但是我們可以通過設置斷點的動作爲(調試器動作)po *(id *)($ebp + 8)來反正(大部分時間)。

0

我不知道任何Xcode設置可能會禁用重新拋出異常。據我所知,它們是由運行時重新引發的。你可以嘗試運行沒有附加調試器的應用程序,讓它崩潰。崩潰報告應該包含一個「Last Exception Backtrace」部分,該部分將爲您準確提供您在這種情況下需要的內容。