ios中的奇怪崩潰Signal和EXC_BAD_ACCESS錯誤分析

來源:互聯網
上載者:User

標籤:接收   崩潰   img   一個   錯誤   -o   term   www   cimage   

什麼是Signal

在電腦科學中,訊號(英語:Signals)是Unix、類Unix以及其他POSIX相容的作業系統中進程間通訊的一種有限制的方式。它是一種非同步通知機制,用來提醒進程一個事件已經發生。當一個訊號發送給一個進程,作業系統中斷了進程正常的控制流程程,此時,任何非原子操作都將被中斷。如果進程定義了訊號的處理函數,那麼它將被執行,否則就執行預設的處理函數。

在iOS中就是未被捕獲的Objective-C異常(NSException),導致程式向自身發送了SIGABRT訊號而崩潰。

Signal訊號的類型

SIGABRT–程式中止命令中止訊號
SIGALRM–程式逾時訊號
SIGFPE–程式浮點異常訊號
SIGILL–程式非法指令訊號
SIGHUP–程式終端中止訊號
SIGINT–程式鍵盤中斷訊號
SIGKILL–程式結束接收中止訊號
SIGTERM–程式kill中止訊號
SIGSTOP–程式鍵盤中止訊號
SIGSEGV–程式無效記憶體中止訊號
SIGBUS–程式記憶體位元組未對齊中止訊號
SIGPIPE–程式Socket發送失敗中止訊號
iOS異常捕獲這篇文章中有對各種訊號的解釋。

SIGABRT

就crash而言,SIGABRT是一個比較好解決的,因為他是一個可掌控的crash。App會在一個目的地終止,因為系統意識到app做了一些他不能支援的事情。

通常, SIGABRT 異常是由於某個對象接收到未實現的訊息引起的。 或者,用簡單的話說,在某個對象上調用了不存在的方法。

SIGSEGV

SIGSEGV程式無效記憶體中止訊號,一般是表示記憶體不合法,

SIGBUS

SIGBUS程式記憶體位元組未對齊中止訊號,

截取Signal和Exception從容的崩潰

一個不錯的崩潰遠嗎,整合到項目中能捕獲崩潰資訊 DSSignalHandlerDemo
這是一個防止奔潰的源碼,可以使一些原本會奔潰的操作彈出UIAlertView。裡面寫了兩種訊號量的崩潰:SIGSEGV、SIGABRT,還有一些訊號大家可以寫上去提個PR給我。

為源碼的運行圖,其中Signal中的Signal(EGV)第一次點擊的時候能彈出alert,如果第二次點擊就沒有崩潰和alert,感覺像卡死一樣。

而Signal(BRT)中的這種訊號錯誤多次點擊也是沒有問題的還是能繼續下去。個人猜測可能是SIGSEGV這種訊號錯誤會導致了整個進程掛了。

注意:測試的時候如果測試Signal類型的崩潰,不要在xcode下的debug模式進行測試。因為系統的debug會優先去攔截。應該build好應用之後直接點擊運行app進行測試。

ios中的奇怪崩潰Signal和EXC_BAD_ACCESS錯誤分析

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.