2011-10-17 178 views
4

我有一個奇怪的問題,我在主循環中得到一個Sigabrt,但沒有顯示錯誤信息,我在網上查了很多這個,但沒有設法找到任何東西有用。所以我的問題是,如何跟蹤什麼導致sigabrt沒有錯誤信息?sigabrt沒有錯誤信息

在此先感謝。

+0

你可以猜測錯誤的位置在堆棧軌跡上 – Giuseppe

回答

12

當程序崩潰時,您可以轉到調試器控制檯並輸入bt(backtrace),這會讓您知道在崩潰時正在執行的代碼。頂級項目可能不是你的代碼,但如果你繼續向下移動,你最終應該看到你的東西。

如果您的代碼中沒有任何調用,那麼這些SIGABRT錯誤通常與您的xib文件相關,在代碼中未反映的xib文件中將會丟失或重命名或者更改某些內容。

+0

謝謝你,那是我一直在尋找的!幫助了我很多,超級,謝謝! – Lukas

2

你看過日誌嗎?

您是否嘗試過在調試器中運行?它應該停下來,並給它一個堆棧跟蹤。也可以嘗試在所有例外情況下設置一個斷點。

+0

是的,我查看了日誌,我從來沒有遇到過這個,每次sigabrt給了我一個錯誤消息和堆棧跟蹤,但現在沒有什麼可以抓住的了。程序停在主循環,我不知道它是什麼。 – Lukas

+0

@Lukas:和調試器的建議? – JeremyP

2

對於SIGABRT錯誤,請在調試中運行,直到程序崩潰。然後,應該在你的代碼編輯器上面有一個黑色的小按鈕,文字「GDB」以黃色顯示在你的小型調試欄中。點擊它,它會調出您的調試器控制檯。這應該顯示sig-abort報告,可能是一個警告,聲明它是由未處理的拋出的異常,所有嵌套函數調用的堆棧跟蹤引起的,還有一條或多條消息處理具體出錯的消息。

我不知道實際的啓動錯誤有什麼問題,但它可能很有可能是您更改了代碼中由您的xib文件引用的某個類的名稱,並且沒有更改引用界面生成器。

只有當應用程序調用資源中缺少的某些內容時纔會發生此錯誤。

例如,我有一個(IBAction)播放聲音,但聲音不再是應用程序的一部分。

檢查您的代碼中的所有調用資源,並確保它們仍在您的xcode項目中。即使在「界面」構建器中使用的圖像也可以生成SIGARBT。

這是一個令人討厭的錯誤,因爲9/10次調試器沒有告訴你什麼是錯的。

0

在我的情況下,我沒有正確處理異步調用和多線程,並且我得到了一個沒有任何消息的SIGABRT崩潰。

在這種情況下真的很難調試,但一般的提示是使用回調來處理你的一系列操作。不要在同一時間執行太多動作,即使它們彼此不相關。

1

太長了,我以爲控制檯給了我XCode 8沒有任何信息,但後來我意識到我只是隱藏了控制檯,需要再次顯示它。

enter image description here

對於其他人被困在一個怪異的腦經,好像我是:

  1. 按下該按鈕,看看Xcode是告訴你壞,修復它

  2. 享受再次生活!

+0

在控制檯過濾器中留下一些文本也會阻止控制檯輸出。 –

0

在我的情況下,問題是觀察者在視圖被解僱後沒有被刪除。具體來說就是Google地圖中@「myLocation」的觀察者。

所以我有這個在viewDidLoad中:

[self.mapView addObserver:self 
       forKeyPath:@"myLocation" 
        options:NSKeyValueObservingOptionNew 
        context:NULL]; 

但我從來沒有移除和解聘地圖視圖的時候我會不斷地崩潰我的應用程序。

我加了這一點:

-(void)dealloc{ 
    [self.mapView removeObserver:self forKeyPath:@"myLocation"]; 
} 

而問題就迎刃而解了。