[英]sigabrt with no error message
我有一個奇怪的問題,我在主循環中得到一個Sigabrt,但沒有顯示錯誤信息,我在互聯網上看了很多,但沒有找到任何有用的東西。 所以我的問題是,如何跟蹤導致sigabrt沒有錯誤消息的原因?
提前致謝。
當您的程序崩潰時,您可以轉到調試器控制台並鍵入bt
(backtrace),這將使您了解崩潰時正在執行的代碼。 頂級項目可能不是您的代碼,但如果您繼續向下移動,您最終應該會在那里看到您的某些內容。
如果您的代碼中沒有任何調用,那么這些SIGABRT錯誤通常與您的xib文件有關,在xib文件中將丟失或重命名或以其他方式更改,但這些錯誤未在您的代碼中反映出來。
你看過日志了嗎?
你試過在調試器中運行嗎? 它應該停止並給它一個堆棧跟蹤。 還嘗試在所有異常上設置斷點。
對於SIGABRT錯誤,請在調試中運行,直到程序崩潰。 然后,在迷你調試欄中的代碼編輯器上方應該有一個帶有黃色文本“GDB”的小黑色按鈕。 單擊它,它將調出您的調試器控制台。 這應該顯示sig-abort報告,可能是一個警告,指出它是由未處理的拋出異常引起的,所有嵌套函數調用的堆棧跟蹤,以及上面的一個或多個消息處理特定錯誤。
我不知道實際的啟動錯誤有什么問題,但很可能你改變了你的xib文件引用的代碼中某個類的名稱,並且沒有更改Interface Builder中的引用。
只有在應用程序調用資源中缺少的內容時才會出現此錯誤。
例如,我有一個(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"];
}
問題解決了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.