iOS監(jiān)控筆記之啟動crash-創(chuàng)新互聯(lián)

前言

專注于為中小企業(yè)提供做網(wǎng)站、網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)衡南免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了上千余家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

相較于正常的崩潰問題,啟動crash造成的損失要遠(yuǎn)遠(yuǎn)大得多。正常來說,如果有足夠強(qiáng)健的構(gòu)建發(fā)布系統(tǒng),大多數(shù)時候能在版本上線之前及時發(fā)現(xiàn)問題并且修復(fù),但是仍然存在小概率的線上意外。啟動crash一般同時具備損害嚴(yán)重以及難以捕獲兩大特點(diǎn)

啟動過程

從應(yīng)用圖標(biāo)被用戶點(diǎn)擊開始,直到應(yīng)用可以開始響應(yīng)發(fā)生了很多事情。正常來說,盡管我們希望crash監(jiān)控工具啟動的盡可能早,但接入方往往總是等到launch事件之后才能啟動工具,而在這個時間之前發(fā)生的崩潰就是啟動crash,下面列出了在應(yīng)用直到launch時,存在的可能發(fā)生啟動crash的階段:

iOS監(jiān)控筆記之啟動crash

其中initialize的順序可能在更早,但總是會在load和launch之間。從圖中來說,如果我們想要監(jiān)控啟動crash,那么開始監(jiān)控的時間點(diǎn)必須要放到load階段,才能保證最好的監(jiān)控效果

如何監(jiān)控

最簡單的方式是不管接入方愿不愿意啟動crash監(jiān)控,我們在load方法中直接啟動監(jiān)控功能。但是這樣的做法會讓應(yīng)用面臨四個風(fēng)險點(diǎn):

  • 類似A/B的線上開關(guān)方案失去了對監(jiān)控工具的控制能力
  • crash監(jiān)控啟動存在崩潰問題,這將導(dǎo)致應(yīng)用完全癱瘓
  • load階段類未加載完畢,啟動工具過程的遞歸加載引發(fā)的崩潰無法監(jiān)控

綜合這些風(fēng)險點(diǎn),啟動crash監(jiān)控的方案應(yīng)該滿足這些條件:

  • 啟動過程不依賴類,避免遞歸加載造成的crash
  • 一旦過程發(fā)生crash,能夠保證日志記錄的安全性

最終得出監(jiān)控的流程圖:

iOS監(jiān)控筆記之啟動crash

不依賴類

不依賴類意味著監(jiān)控工具需要使用C接口來實現(xiàn)功能,雖然比較麻煩,但由于runtime的機(jī)制決定了所有方法調(diào)用最終要以objc_msgSend函數(shù)作為入口,因此如果能夠hook掉這個函數(shù)并且實現(xiàn)一個調(diào)用棧結(jié)構(gòu),將所有調(diào)用入棧記錄,那么追蹤方法調(diào)用就不是難事。fishhook提供了hook掉函數(shù)的能力:

__unused static id (*orig_objc_msgSend)(id, SEL, ...);

__attribute__((__naked__)) static void hook_Objc_msgSend() {
 /// save stack data
 /// push msgSend
 /// resume stack data
 
 /// call origin msgSend
 
 /// save stack data
 /// pop msgSend
 /// resume stack data
}

void observe_Objc_msgSend() {
 struct rebinding msgSend_rebinding = { "objc_msgSend", hook_Objc_msgSend, (void *)&orig_objc_msgSend };
 rebind_symbols((struct rebinding[1]){msgSend_rebinding}, 1);
}

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站muchs.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

網(wǎng)站名稱:iOS監(jiān)控筆記之啟動crash-創(chuàng)新互聯(lián)
轉(zhuǎn)載注明:http://muchs.cn/article36/spgsg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站手機(jī)網(wǎng)站建設(shè)、標(biāo)簽優(yōu)化網(wǎng)站改版、小程序開發(fā)、靜態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)