前言
專(zhuān)注于為中小企業(yè)提供做網(wǎng)站、網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)衡南免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上千余家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。相較于正常的崩潰問(wèn)題,啟動(dòng)crash造成的損失要遠(yuǎn)遠(yuǎn)大得多。正常來(lái)說(shuō),如果有足夠強(qiáng)健的構(gòu)建發(fā)布系統(tǒng),大多數(shù)時(shí)候能在版本上線之前及時(shí)發(fā)現(xiàn)問(wèn)題并且修復(fù),但是仍然存在小概率的線上意外。啟動(dòng)crash一般同時(shí)具備損害嚴(yán)重以及難以捕獲兩大特點(diǎn)
啟動(dòng)過(guò)程
從應(yīng)用圖標(biāo)被用戶(hù)點(diǎn)擊開(kāi)始,直到應(yīng)用可以開(kāi)始響應(yīng)發(fā)生了很多事情。正常來(lái)說(shuō),盡管我們希望crash監(jiān)控工具啟動(dòng)的盡可能早,但接入方往往總是等到launch事件之后才能啟動(dòng)工具,而在這個(gè)時(shí)間之前發(fā)生的崩潰就是啟動(dòng)crash,下面列出了在應(yīng)用直到launch時(shí),存在的可能發(fā)生啟動(dòng)crash的階段:
其中initialize的順序可能在更早,但總是會(huì)在load和launch之間。從圖中來(lái)說(shuō),如果我們想要監(jiān)控啟動(dòng)crash,那么開(kāi)始監(jiān)控的時(shí)間點(diǎn)必須要放到load階段,才能保證最好的監(jiān)控效果
如何監(jiān)控
最簡(jiǎn)單的方式是不管接入方愿不愿意啟動(dòng)crash監(jiān)控,我們?cè)趌oad方法中直接啟動(dòng)監(jiān)控功能。但是這樣的做法會(huì)讓?xiě)?yīng)用面臨四個(gè)風(fēng)險(xiǎn)點(diǎn):
綜合這些風(fēng)險(xiǎn)點(diǎn),啟動(dòng)crash監(jiān)控的方案應(yīng)該滿(mǎn)足這些條件:
最終得出監(jiān)控的流程圖:
不依賴(lài)類(lèi)
不依賴(lài)類(lèi)意味著監(jiān)控工具需要使用C接口來(lái)實(shí)現(xiàn)功能,雖然比較麻煩,但由于runtime的機(jī)制決定了所有方法調(diào)用最終要以objc_msgSend函數(shù)作為入口,因此如果能夠hook掉這個(gè)函數(shù)并且實(shí)現(xiàn)一個(gè)調(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)建站www.cdcxhl.com,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。