[譯]《iOS Crash Dump Analysis》- 快速入門

點(diǎn)贊評(píng)論外永,感覺有用的朋友可以關(guān)注筆者公眾號(hào) iOS 成長(zhǎng)指北兆衅,持續(xù)更新
原書為 iOS Crash Dump Analysis Book毁枯,已得作者授權(quán)磺陡,歡迎 star

當(dāng)近期的代碼修改導(dǎo)致應(yīng)用程序發(fā)生崩潰時(shí)沼本,我們可以很容易的對(duì)崩潰進(jìn)行分析然后找到相關(guān)代碼并進(jìn)行修改兢交。但是通常薪捍,崩潰只是由于操作環(huán)境的變化而出現(xiàn)。那可能是最煩人的。例如酪穿,應(yīng)用程序在辦公室中正常運(yùn)行凳干,但在客戶站點(diǎn)崩潰。我們沒有時(shí)間去探究為什么崩潰被济,但需要快速解決或提出解決方法救赐。當(dāng)探索一個(gè)新項(xiàng)目時(shí),會(huì)出現(xiàn)另一個(gè)常見的問題場(chǎng)景只磷。 在這里净响,我們沒有使用代碼庫(kù)的經(jīng)驗(yàn),但是在編譯和運(yùn)行應(yīng)用程序后立即會(huì)遇到崩潰問題喳瓣。

在本章中馋贤,我們將探討由于操作環(huán)境的變化而導(dǎo)致崩潰的可能原因。無(wú)需深入分析手頭問題的細(xì)節(jié)就可以解決許多問題畏陕。 實(shí)際上配乓,有時(shí)我們只需在取得進(jìn)展的同時(shí)進(jìn)行回顧,便可以追溯到根本原因惠毁。

故障排除

資源缺失問題

有些時(shí)候犹芹,我們的應(yīng)用程序由于資源缺失問題而在啟動(dòng)時(shí)崩潰。

我們應(yīng)該嘗試去編譯運(yùn)行項(xiàng)目中的所有的Xcode Target鞠绰。有時(shí)候腰埂,某個(gè)特定的 Target,會(huì)成為該項(xiàng)目整體環(huán)境不可獲取的一部分如果是這樣蜈膨,我們可以做一個(gè)注釋屿笼,以便稍后解決這些問題。

二進(jìn)制兼容問題

由于二進(jìn)制兼容的問題翁巍,有些時(shí)候驴一,我們的應(yīng)用程序會(huì)在啟動(dòng)時(shí)發(fā)生崩潰。

如果我們剛剛更新了我們的Xcode灶壶,或者在編譯好我們工程的同時(shí)拉代碼進(jìn)行了更新肝断。我們可以使用 Option-Command-Shift-K 命令編譯過程中產(chǎn)生的中間文件,目標(biāo)文件及可執(zhí)行文件驰凛,使得項(xiàng)目回到?jīng)]有編譯之前的狀態(tài)胸懈,然后重新編譯。

一般來(lái)說我們可以直接刪除 ~/Library/Developer/Xcode/DerivedData 達(dá)到近似效果

只有模擬器有的問題

有些時(shí)候恰响,我們的應(yīng)用程序只在模擬器上發(fā)生崩潰趣钱。

這時(shí)候,我們應(yīng)該嘗試模擬器的 Hardware->Reset 功能對(duì)內(nèi)容和功能進(jìn)行重置渔隶。我們可以嘗試使用 iPad 模擬器來(lái)替代 iPhone模擬器羔挡,反之亦然。示例項(xiàng)目通常用于解釋特定技術(shù)间唉,而不會(huì)去考慮產(chǎn)品化或著通用性绞灼。

特定設(shè)備的問題

有些時(shí)候,我們的應(yīng)用程序只會(huì)在客戶設(shè)備上發(fā)生崩潰呈野。

我們可以檢查 Wi-Fi 設(shè)置或嘗試將 iPad 熱點(diǎn)連接到 iPhone低矮。在辦公室/家庭環(huán)境中開發(fā)我們的應(yīng)用程序時(shí),有時(shí)我們會(huì)忽略諸如連接或延遲之類的網(wǎng)絡(luò)問題被冒。如果這就是問題所在军掂,我們應(yīng)該記錄下來(lái)以便嘗試并修復(fù)這些問題。

用戶設(shè)備部署的問題

有些時(shí)候昨悼,我們的應(yīng)用程序僅在客戶設(shè)備上發(fā)生崩潰蝗锥。

當(dāng)我們將電腦與用戶的設(shè)備相連時(shí),我們可能正在進(jìn)行 Debug 環(huán)境的部署率触。這意味著推送通知的 tokens 將是開發(fā)環(huán)境而不是生產(chǎn)環(huán)境的推送 tokens终议。這同時(shí)也意味著資源的訪問授權(quán)(例如,對(duì) Camera 相機(jī)功能的授權(quán))不再有效葱蝗,因?yàn)樗鼈兛赡芤呀?jīng)通過應(yīng)用程序的 TestFlight 版本或先前的App Store版本(生產(chǎn)版本)獲得了批準(zhǔn)穴张。

我們應(yīng)該嘗試通過 Command -< 選擇左側(cè)面板中的 Run,右側(cè)面板中的 Info 選項(xiàng)两曼,Build Configuration 設(shè)置 Release(不是 Debug)來(lái)切換部署配置皂甘。 我們還應(yīng)手動(dòng)檢查 iPad/iPhone 設(shè)置中的任何資源訪問授權(quán)。

特定語(yǔ)言環(huán)境的問題

有時(shí)候悼凑,客戶設(shè)備的特定的語(yǔ)言環(huán)境會(huì)導(dǎo)致崩潰的發(fā)生

錯(cuò)誤的語(yǔ)言環(huán)境中可能會(huì)缺失某些資源文件偿枕。此外,處理語(yǔ)言環(huán)境充斥著毫無(wú)征兆的特殊情況户辫。我們應(yīng)該嘗試將區(qū)域設(shè)置暫時(shí)更改為已知的語(yǔ)言區(qū)域益老。 當(dāng)你回歸問題時(shí)不要忘記做好筆記。

不同地區(qū)的用戶寸莫,NSCalendar 默認(rèn)的 firstWeekday 的值是不一致的捺萌,這個(gè)基于當(dāng)?shù)氐牧?xí)慣。如果你的 APP 的受眾更為廣泛膘茎,請(qǐng)注意這一點(diǎn)

對(duì)于崩潰的思考

從上面的例子中得到的教訓(xùn)就是我們需要在更廣泛的背景下去思考我們的代碼桃纯。我們應(yīng)該考慮應(yīng)用程序的運(yùn)行環(huán)境。 包括:

  • 編譯后的代碼
  • 代碼模塊之間的二進(jìn)制不兼容性(不同的語(yǔ)言版本披坏,編譯器和工具鏈)
  • 捆綁或下載到應(yīng)用程序中的資源文件
  • 構(gòu)建配置(例如 ReleaseDebug
  • 網(wǎng)絡(luò)環(huán)境态坦,可用性/延遲/速度
  • 應(yīng)用程序的允許使用的權(quán)限
  • 應(yīng)用程序被拒絕的權(quán)限(在移動(dòng)設(shè)備管理安全環(huán)境中)
  • 平臺(tái)變種
  • 方向
  • 前后端不同的操作模式
  • 硬件性能(舊的慢速硬件與更快的新設(shè)備)
  • 硬件組件(GPU,內(nèi)存棒拂,CPU伞梯,配件等)
  • 地理位置相關(guān)問題
  • 區(qū)域問題(語(yǔ)言環(huán)境等)
  • 存在診斷設(shè)置
  • 存在調(diào)試器或分析器
  • 目標(biāo)設(shè)備的操作系統(tǒng)版本

作為樹立正確的思路以解決應(yīng)用程序崩潰的第一步玫氢,我們有必要解決上述每個(gè)操作環(huán)境差異,并試著記下這種差異是否會(huì)導(dǎo)致我們知道或懷疑可能發(fā)生的崩潰谜诫。這告訴我們漾峡,崩潰更多是關(guān)于環(huán)境而不是源代碼。另一個(gè)次要的見解是喻旷,我們?cè)侥軌蚋鶕?jù)特定的環(huán)境差異生成一系列假設(shè)生逸,我們就能更容易、更快地找到其他人看起來(lái)很神秘的崩潰的根本原因且预,而且我們幾乎是神奇的想出了問題可能出在哪里的建議槽袄。

以下是民間傳說中的一些奇怪的信息技術(shù)崩潰案例,以激發(fā)我們的欲望并讓我們展開思考:

基于不同語(yǔ)言環(huán)境的崩潰

俄語(yǔ)語(yǔ)言環(huán)境在日期處理期間導(dǎo)致崩潰锋谐。

這是因?yàn)?1984-04-01 被用來(lái)當(dāng)做哨兵日期遍尺。但是,在俄羅斯是沒有這樣的日期/時(shí)間涮拗,因?yàn)樵诙砹_斯當(dāng)天是沒有午夜的狮鸭,即沒有 1984-04-01 00:00:00。這是因?yàn)槎砹_斯的夏令時(shí)開始于當(dāng)天的 1 點(diǎn)鐘多搀。

這是在 WecudosPro iPad 應(yīng)用程序開發(fā)期間在俄羅斯進(jìn)行測(cè)試時(shí)看到的

地理位置引起的崩潰

一臺(tái)計(jì)算機(jī)在每天的不同時(shí)間都會(huì)發(fā)生崩潰歧蕉。

這個(gè)問題實(shí)際上是因?yàn)檫@臺(tái)計(jì)算機(jī)被放置在一個(gè)有船只經(jīng)過的河口旁邊的窗戶。在漲潮時(shí)康铭,一艘軍艦將駛過惯退,其雷達(dá)將破壞電子設(shè)備從而導(dǎo)致計(jì)算機(jī)發(fā)生崩潰。

在 Kepner-Tregoe 正式的問題解決培訓(xùn)會(huì)上从藤,這個(gè)民間傳說故事被告知給在英國(guó)的 Sun Microsystems 客服中心的工程師們催跪。

總線噪音崩潰

當(dāng)計(jì)算機(jī)同時(shí)承受較大的網(wǎng)絡(luò)負(fù)載和磁盤負(fù)載時(shí),系統(tǒng)會(huì)發(fā)生崩潰夷野。

這個(gè)奔潰是由于磁盤損壞造成的懊蒸。每64字節(jié)的內(nèi)存中都會(huì)出現(xiàn)一個(gè)零。它是計(jì)算機(jī)的緩存行大小悯搔。由于內(nèi)存板接線錯(cuò)誤骑丸,導(dǎo)致旁邊的磁盤帶狀電纜在64字節(jié)邊界處產(chǎn)生噪音。

這是在 Sun Volume Systems Group 計(jì)算機(jī)的早期原型中看到的妒貌。

感謝你閱讀本文通危! ??

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市灌曙,隨后出現(xiàn)的幾起案子菊碟,更是在濱河造成了極大的恐慌,老刑警劉巖在刺,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件逆害,死亡現(xiàn)場(chǎng)離奇詭異头镊,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)魄幕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門相艇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人梅垄,你說我怎么就攤上這事∈溏瑁” “怎么了队丝?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)欲鹏。 經(jīng)常有香客問我机久,道長(zhǎng),這世上最難降的妖魔是什么赔嚎? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任膘盖,我火速辦了婚禮,結(jié)果婚禮上尤误,老公的妹妹穿的比我還像新娘侠畔。我一直安慰自己,他們只是感情好损晤,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布软棺。 她就那樣靜靜地躺著,像睡著了一般尤勋。 火紅的嫁衣襯著肌膚如雪喘落。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天最冰,我揣著相機(jī)與錄音瘦棋,去河邊找鬼。 笑死暖哨,一個(gè)胖子當(dāng)著我的面吹牛赌朋,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播篇裁,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼箕慧,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了茴恰?” 一聲冷哼從身側(cè)響起颠焦,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎往枣,沒想到半個(gè)月后伐庭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體粉渠,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年圾另,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了霸株。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡集乔,死狀恐怖去件,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情扰路,我是刑警寧澤尤溜,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站汗唱,受9級(jí)特大地震影響宫莱,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜哩罪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一授霸、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧际插,春花似錦碘耳、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至功咒,卻和暖如春愉阎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背力奋。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工榜旦, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人景殷。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓溅呢,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親猿挚。 傳聞我的和親對(duì)象是個(gè)殘疾皇子咐旧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

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