iOS try-catch機(jī)制與SIGABRT信號(hào)

iOS程序異常crash捕獲與攔截

對(duì)于iOS應(yīng)用try-catch并不能捕獲所有異常金顿,也就是說(shuō)有時(shí)候我們加上了try-catch可是程序還是會(huì)Crash资溃,目前我所總結(jié)有兩種:一種是由EXC_BAD_ACCESS引起的,原因是訪問(wèn)了不屬于本進(jìn)程的內(nèi)存地址,有可能是訪問(wèn)已被釋放的內(nèi)存;另一種是未被捕獲的Objective-C異常(NSException),導(dǎo)致程序向自身發(fā)送了SIGABRT信號(hào)而崩潰驹吮。其實(shí)對(duì)于未捕獲的Objective-C異常针史,我們是有辦法將它記錄下來(lái)的,如果日志記錄得當(dāng)碟狞,能夠解決絕大部分崩潰的問(wèn)題啄枕。下面對(duì)于UI線程與后臺(tái)線程分別說(shuō)明。

傳統(tǒng)的捕獲異常的方式中所熟知try-catch-finally篷就,但有些時(shí)候一些iOS系統(tǒng)的api是原生的C語(yǔ)法格式例如:sqlite3.c射亏,UnGzip.c這些是不支持OC或者C++的try-catch機(jī)制即使有異常也是捕獲不到,或者是一些內(nèi)存的問(wèn)題等在try里面還是會(huì)無(wú)情的Crash竭业。

try-catch

iOSSDK中提供了一個(gè)現(xiàn)成的函數(shù)NSSetUncaughtExceptionHandler用來(lái)做異常處理智润,但功能非常有限,而引起崩潰的大多數(shù)原因如:內(nèi)存訪問(wèn)錯(cuò)誤未辆,重復(fù)釋放等錯(cuò)誤就無(wú)能為力了窟绷,因?yàn)檫@種錯(cuò)誤它拋出的是Signal,所以必須要專(zhuān)門(mén)做Signal處理咐柜。代碼如下

NSSetUncaughtExceptionHandler

通過(guò)上圖的操作我們就完成了iOS SDK給我們提供的捕捉異常處理兼蜈,我們只需要在HandleException方法中紀(jì)錄我們的異常信息即可。但這僅僅是捕獲一般的OC異常信息拙友,對(duì)于Signal異常信號(hào)我們?nèi)匀粺o(wú)法捕獲到为狸,此時(shí)我們就需要去注冊(cè)一些Signal信號(hào)來(lái)幫助我們捕獲Signal異常。首先介紹一下Signal信號(hào):

signal遗契。既信號(hào)量辐棒,ios是Linux內(nèi)核,在程序發(fā)生未捕獲異常時(shí)牍蜂,程序會(huì)向自身發(fā)送信號(hào)(SIGABRT漾根、SIGBUS、SIGHUP等辐怕。。从绘。)寄疏,然后程序直接閃退。僵井。赁还。有時(shí)候這是無(wú)可避免的。作為一款優(yōu)秀的軟件驹沿,必須要有異常報(bào)告模塊,讓用戶給你發(fā)送異常報(bào)告信息蹈胡。這樣才能根據(jù)異常信息來(lái)做相應(yīng)地Debug工作渊季。在iOS SDK

signal.h里面有31種信號(hào)方式這里不做一一解釋朋蔫。

信號(hào)類(lèi)型

下面說(shuō)一下怎么注冊(cè)這些信號(hào)量來(lái)幫助我們記錄到異常信息。代碼如下:

installSianalHandler方法
注冊(cè)SIGNAL信號(hào)

上圖中的signal(SIGHUP, void(*)(int));方法為iOS signal.h中的注冊(cè)信號(hào)量的方法其中第二個(gè)參數(shù)為收到信號(hào)的回調(diào)函數(shù)却汉,我們通過(guò)這個(gè)回調(diào)函數(shù)可以根據(jù)我們的需求做一些處理驯妄。

小結(jié):try-Catch只能幫助我們攔截一些bug或者幫助我們提供一些錯(cuò)誤信息,要從根本上解決程序的問(wèn)題還需要不斷的調(diào)試合砂,優(yōu)化青扔。

作者:Olivia_Zqy

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市翩伪,隨后出現(xiàn)的幾起案子微猖,更是在濱河造成了極大的恐慌,老刑警劉巖缘屹,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件凛剥,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡轻姿,警方通過(guò)查閱死者的電腦和手機(jī)犁珠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)互亮,“玉大人犁享,你說(shuō)我怎么就攤上這事”荩” “怎么了炊昆?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)慕爬。 經(jīng)常有香客問(wèn)我窑眯,道長(zhǎng),這世上最難降的妖魔是什么医窿? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任磅甩,我火速辦了婚禮,結(jié)果婚禮上姥卢,老公的妹妹穿的比我還像新娘卷要。我一直安慰自己,他們只是感情好独榴,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布僧叉。 她就那樣靜靜地躺著,像睡著了一般棺榔。 火紅的嫁衣襯著肌膚如雪瓶堕。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,457評(píng)論 1 311
  • 那天症歇,我揣著相機(jī)與錄音郎笆,去河邊找鬼谭梗。 笑死,一個(gè)胖子當(dāng)著我的面吹牛宛蚓,可吹牛的內(nèi)容都是我干的激捏。 我是一名探鬼主播,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼凄吏,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼远舅!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起痕钢,我...
    開(kāi)封第一講書(shū)人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤图柏,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后盖喷,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體爆办,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年课梳,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了距辆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡暮刃,死狀恐怖跨算,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情椭懊,我是刑警寧澤诸蚕,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站氧猬,受9級(jí)特大地震影響背犯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜盅抚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一漠魏、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧妄均,春花似錦柱锹、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至邑彪,卻和暖如春瞧毙,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工宙彪, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留撑柔,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓您访,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親剪决。 傳聞我的和親對(duì)象是個(gè)殘疾皇子灵汪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

推薦閱讀更多精彩內(nèi)容