我有一個奇怪的問題,我在主循環中得到一個Sigabrt,但沒有顯示錯誤信息,我在網上查了很多這個,但沒有設法找到任何東西有用。所以我的問題是,如何跟蹤什麼導致sigabrt沒有錯誤信息?sigabrt沒有錯誤信息
在此先感謝。
我有一個奇怪的問題,我在主循環中得到一個Sigabrt,但沒有顯示錯誤信息,我在網上查了很多這個,但沒有設法找到任何東西有用。所以我的問題是,如何跟蹤什麼導致sigabrt沒有錯誤信息?sigabrt沒有錯誤信息
在此先感謝。
當程序崩潰時,您可以轉到調試器控制檯並輸入bt
(backtrace),這會讓您知道在崩潰時正在執行的代碼。頂級項目可能不是你的代碼,但如果你繼續向下移動,你最終應該看到你的東西。
如果您的代碼中沒有任何調用,那麼這些SIGABRT錯誤通常與您的xib文件相關,在代碼中未反映的xib文件中將會丟失或重命名或者更改某些內容。
謝謝你,那是我一直在尋找的!幫助了我很多,超級,謝謝! – Lukas
對於SIGABRT錯誤,請在調試中運行,直到程序崩潰。然後,應該在你的代碼編輯器上面有一個黑色的小按鈕,文字「GDB」以黃色顯示在你的小型調試欄中。點擊它,它會調出您的調試器控制檯。這應該顯示sig-abort報告,可能是一個警告,聲明它是由未處理的拋出的異常,所有嵌套函數調用的堆棧跟蹤引起的,還有一條或多條消息處理具體出錯的消息。
我不知道實際的啓動錯誤有什麼問題,但它可能很有可能是您更改了代碼中由您的xib文件引用的某個類的名稱,並且沒有更改引用界面生成器。
只有當應用程序調用資源中缺少的某些內容時纔會發生此錯誤。
例如,我有一個(IBAction)播放聲音,但聲音不再是應用程序的一部分。
檢查您的代碼中的所有調用資源,並確保它們仍在您的xcode項目中。即使在「界面」構建器中使用的圖像也可以生成SIGARBT。
這是一個令人討厭的錯誤,因爲9/10次調試器沒有告訴你什麼是錯的。
在我的情況下,我沒有正確處理異步調用和多線程,並且我得到了一個沒有任何消息的SIGABRT
崩潰。
在這種情況下真的很難調試,但一般的提示是使用回調來處理你的一系列操作。不要在同一時間執行太多動作,即使它們彼此不相關。
在我的情況下,問題是觀察者在視圖被解僱後沒有被刪除。具體來說就是Google地圖中@「myLocation」的觀察者。
所以我有這個在viewDidLoad中:
[self.mapView addObserver:self
forKeyPath:@"myLocation"
options:NSKeyValueObservingOptionNew
context:NULL];
但我從來沒有移除和解聘地圖視圖的時候我會不斷地崩潰我的應用程序。
我加了這一點:
-(void)dealloc{
[self.mapView removeObserver:self forKeyPath:@"myLocation"];
}
而問題就迎刃而解了。
你可以猜測錯誤的位置在堆棧軌跡上 – Giuseppe