[譯]《iOS Crash Dump Analysis》- 分析性故障排除

點(diǎn)贊評(píng)論涩嚣,感覺(jué)有用的朋友可以關(guān)注筆者公眾號(hào) iOS 成長(zhǎng)指北驯嘱,持續(xù)更新
原書(shū)為 iOS Crash Dump Analysis Book巷怜,已得作者授權(quán)优炬,歡迎 star

本章將討論一個(gè)解決問(wèn)題的正式技巧驳遵。這個(gè)技巧是提供一個(gè)詢(xún)問(wèn)正確問(wèn)題的框架怨喘。

有一個(gè)著名的俗語(yǔ)告誡我們不要過(guò)渡狂熱:

“不要用大錘去砸螺母津畸。”

大多數(shù)問(wèn)題都有直接而明顯的解決方法必怜。作為工程師肉拓、開(kāi)發(fā)人員和測(cè)試人員竿拆,我們對(duì)解決問(wèn)題都非常熟悉坷剧。然而脉幢,本章并不涉及那些類(lèi)型的問(wèn)題陪毡。

還有另外一個(gè)不太知名的俗語(yǔ):

“當(dāng)您拿著錘子時(shí),一切看起來(lái)都像釘子磨总〗槠溃”

錘子最適合釘釘子看政,通常也可以砸東西更米,但是對(duì)其他的可能并不有用欺栗。錘子是對(duì)某種問(wèn)題的解決方案。此外,我們思考問(wèn)題的方式可以由一些技巧組成迟几。如果我們?cè)黾涌捎玫募记上耄_(kāi)始以不同的方式去思考問(wèn)題,其中可能有一種方式會(huì)讓我們獲得我們想要的答案瘤旨。

如果我們的工具箱中有一把扳手和一把鋼鋸。我們想拆除一個(gè)已生銹螺栓固定的舊浴室配件竖伯。由于螺栓無(wú)法轉(zhuǎn)動(dòng)存哲,因此可能無(wú)法使用扳手。但是七婴,使用鋼鋸鋸掉螺栓頭可能是一個(gè)可行的次佳解決方案祟偷。 通過(guò)觀(guān)察有經(jīng)驗(yàn)的水管工人或技工,就會(huì)發(fā)現(xiàn)這種技巧打厘。

在這種情況下修肠,我們將介紹“分析故障排除”。當(dāng)我們用盡所有方法并且已經(jīng)嘗試了一些常見(jiàn)手段之后户盯,本章將幫助我們推進(jìn)解決問(wèn)題嵌施。

這個(gè)方法是 Kepner Tregoe 方法 的簡(jiǎn)化版本。

優(yōu)先考慮自己的問(wèn)題

如果我們是一個(gè)應(yīng)用程序(可能只有很少的用戶(hù))的唯一開(kāi)發(fā)者莽鸭,當(dāng)我們收到崩潰報(bào)告時(shí)吗伤,可能會(huì)感到我們正在面臨著一場(chǎng)好奇的智力挑戰(zhàn)。

在專(zhuān)業(yè)的軟件工程環(huán)境中硫眨,實(shí)際情況截然不同足淆。通常會(huì)有一個(gè)團(tuán)隊(duì)進(jìn)行統(tǒng)籌處理,對(duì)于不同客戶(hù)進(jìn)行優(yōu)先級(jí)篩選礁阁,并且針對(duì)不同的產(chǎn)品和產(chǎn)品變形巧号,來(lái)自不同客戶(hù)的崩潰報(bào)告也很多。

我們必須確定要處理的崩潰的優(yōu)先級(jí)姥闭。我們將從三個(gè)方法來(lái)思考問(wèn)題:嚴(yán)重性丹鸿、緊迫性和成長(zhǎng)性。

根據(jù)影響確定優(yōu)先級(jí)

對(duì)許多開(kāi)發(fā)團(tuán)隊(duì)來(lái)說(shuō)棚品,崩潰是最重要的“P1”級(jí)別的錯(cuò)誤卜高,因?yàn)榭蛻?hù)無(wú)法再使用應(yīng)用程序做任何事情。為了要判斷問(wèn)題的嚴(yán)重性南片,我們首先要評(píng)估問(wèn)題的 影響掺涛。問(wèn)題發(fā)生時(shí),用戶(hù)正在做些什么疼进?

如果客戶(hù)正在進(jìn)行商品購(gòu)買(mǎi)薪缆,那么如果不能解決問(wèn)題,顯然我們的收入將受到影響。

如果是在更新我們的隱私設(shè)置時(shí)發(fā)生了崩潰拣帽,則表明存在對(duì)應(yīng)設(shè)置的隱私問(wèn)題疼电。根據(jù)我們產(chǎn)品的具體類(lèi)型,這可能是一個(gè)主要問(wèn)題减拭。

在我們的應(yīng)用中內(nèi)置分析工具蔽豺,是評(píng)估影響的一種方法。然后可以在崩潰的同時(shí)分析這些步驟拧粪,更廣泛的說(shuō)是客戶(hù)用例修陡。然后,可以將最多最廣泛的崩潰用例確定為最需要修復(fù)的崩潰問(wèn)題可霎。第三方崩潰報(bào)告集成服務(wù)的一項(xiàng)優(yōu)勢(shì)就是它們?cè)试S記錄日志并與崩潰報(bào)告一起發(fā)送到崩潰報(bào)告服務(wù)器魄鸦。

以下是日志可以記錄的一些好的點(diǎn):

  • 任何生命周期發(fā)生的時(shí)間,前臺(tái)癣朗、后臺(tái)拾因、頁(yè)面出現(xiàn)、頁(yè)面消失

  • 按鈕點(diǎn)擊

  • 跳轉(zhuǎn)

  • 通知

  • 彈出提醒

  • 調(diào)用諸如照片選擇器之類(lèi)的輔助組件

根據(jù)截止日期確定優(yōu)先級(jí)

為了判斷錯(cuò)誤修復(fù)的緊迫性旷余,我們需要評(píng)估與該錯(cuò)誤相關(guān)的 截止日期绢记。每當(dāng) Apple 更新產(chǎn)品線(xiàn)時(shí)(例如,每年 9月 iPhone 都會(huì)迭代新機(jī)型)正卧,市面上的應(yīng)用程序都會(huì)進(jìn)入一個(gè)自然而然的迭代期庭惜。新的用戶(hù)將會(huì)去 App Store 下載新的應(yīng)用。媒體上將會(huì)有很多關(guān)于 Apple 產(chǎn)品功能的討論穗酥。因此护赊,它被標(biāo)記成一個(gè)良好的市場(chǎng)窗口。此時(shí)砾跃,任何會(huì)導(dǎo)致應(yīng)用商店審核失敗或應(yīng)用首次使用的崩潰問(wèn)題都變得越來(lái)越重要骏啰。Apple 有時(shí)會(huì)引入一個(gè)新的應(yīng)用類(lèi)別,例如手表應(yīng)用或貼紙包抽高。在第一天就可以使用判耕,就會(huì)具有先發(fā)優(yōu)勢(shì),甚至有可能成為 Apple 發(fā)布活動(dòng)的一部分翘骂。

根據(jù)趨勢(shì)確定優(yōu)先級(jí)

當(dāng)我們看到崩潰報(bào)告數(shù)量的增長(zhǎng)令人震驚壁熄,需要通過(guò)分析 趨勢(shì) 來(lái)進(jìn)行評(píng)估。我們可以查看隨著時(shí)間的推移獲得的崩潰報(bào)告數(shù)量碳竟,并查看是否存在峰值或上升趨勢(shì)草丧。

如果我們的應(yīng)用程序由于 iOS 新版本中的功能而崩潰,那么最早遇到該問(wèn)題的人就是更新了 iOS Beta 版的用戶(hù)莹桅。之后昌执,iOS 設(shè)備就會(huì)開(kāi)始自動(dòng)升級(jí)。有事,iOS 新版本將會(huì)以地理位置分段交錯(cuò)更新懂拾。我們希望這會(huì)在崩潰報(bào)告中所看到的趨勢(shì)中得到反映煤禽。

如果我們?cè)诒罎?bào)告中看到一個(gè)峰值(先升后降),那么可能還有其他影響系統(tǒng)架構(gòu)組件的因素岖赋。 例如檬果,如果我們的應(yīng)用程序依賴(lài)于后端服務(wù)器,該后端服務(wù)器為我們的應(yīng)用程序以一種有問(wèn)題的方式更新唐断,則在修復(fù)服務(wù)器之前选脊,我們可能會(huì)看到崩潰。

有時(shí)問(wèn)題的時(shí)機(jī)可能很尷尬栗涂。例如知牌,當(dāng)要處理例如證書(shū)之類(lèi)的安全憑證時(shí)祈争,最好不要將其到期日期設(shè)置在傳統(tǒng)假期中斤程,例如圣誕節(jié)或農(nóng)歷新年,因?yàn)楫?dāng)它們到期時(shí)菩混,可能沒(méi)有人力來(lái)更新或者替換忿墅。

在熱門(mén)假期之間發(fā)布重要的軟件更新是極其不明智的做法。如果我們的產(chǎn)品需要來(lái)迎合假期間各種熱點(diǎn)沮峡,那么就需要人力來(lái)處理相應(yīng)的問(wèn)題疚脐。

密切關(guān)注趨勢(shì),在崩潰更廣泛的傳播之前邢疙,我們能夠得以安排工作并解決問(wèn)題棍弄。不同的應(yīng)用程序具有不同的風(fēng)險(xiǎn)狀況。例如疟游,對(duì)移動(dòng)設(shè)備管理 API 敏感的應(yīng)用程序應(yīng)使用 iOS Beta 版本進(jìn)行測(cè)試呼畸,因?yàn)閷?duì)系統(tǒng)級(jí)別來(lái)說(shuō),細(xì)微的更改可能會(huì)產(chǎn)生巨大的影響颁虐,所以需要今早的進(jìn)行測(cè)試蛮原。如果我們有一個(gè)對(duì)繪制敏感的應(yīng)用程序,那么我們則應(yīng)該關(guān)注新的硬件設(shè)備另绩、硬件規(guī)格的更新儒陨,挺尸我們應(yīng)該有一個(gè)整體的測(cè)試框架,該框架可以測(cè)試我們所依賴(lài)平臺(tái)中的關(guān)鍵 API笋籽,因此可以對(duì)新的 OS 版本或硬件平臺(tái)進(jìn)行快速評(píng)估蹦漠。

崩潰報(bào)告趨勢(shì)不一定是不利的。如果僅在交舊的硬件版本上看到異常崩潰车海,呢么我們預(yù)計(jì)趨勢(shì)會(huì)隨著時(shí)間的推移而下降津辩,因此有可能取消對(duì)此類(lèi)崩潰問(wèn)題的優(yōu)先級(jí)。

說(shuō)明問(wèn)題

我們提供的崩潰信息有:崩潰報(bào)告,客戶(hù)日志喘沿,分析數(shù)據(jù)等闸度。應(yīng)該總結(jié)為 OBJECT / DEFECT 風(fēng)格的簡(jiǎn)短問(wèn)題陳述。這通常是分擔(dān)潛在大量崩潰報(bào)告的關(guān)鍵的第一步蚜印。這使得我們對(duì)問(wèn)題有了第一手的資料莺禁,并使管理人員和其他有關(guān)方面可以了解我們?cè)诋a(chǎn)品質(zhì)量,成熟度窄赋,風(fēng)險(xiǎn)等方面的狀況哟冬。

首先,我們陳述問(wèn)題的對(duì)象忆绰。 那就是應(yīng)用程序或產(chǎn)品失敗了浩峡。 然后,我們指出缺陷错敢。 這就是我們看到的“不良行為”翰灾。 它應(yīng)該像“使用 Apple Share 按鈕時(shí) CameraApp Lite 發(fā)生崩潰”那樣簡(jiǎn)單。 并且應(yīng)該在錯(cuò)誤管理系統(tǒng)中跟蹤該問(wèn)題稚茅。

指出問(wèn)題

在分析故障排除方法中纸淮,指定問(wèn)題是最重要的一步,因?yàn)槲覀冊(cè)谶@里看到了我們認(rèn)知上盲區(qū)亚享,這就提示了問(wèn)題咽块,這些問(wèn)題會(huì)引導(dǎo)我們找到解決方案。

我們寫(xiě)出一個(gè)有四行兩列的表格欺税,如下所示:

Item IS IS NOT
WHAT Seen Not Seen
WHERE Seen Not Seen
WHEN Seen Not Seen
EXTENT Seen Not Seen

對(duì)一個(gè)團(tuán)隊(duì)來(lái)說(shuō)侈沪,分析性故障排除很有效果。通過(guò)一些領(lǐng)域?qū)I(yè)人員(專(zhuān)家)晚凿,以及來(lái)自其他領(lǐng)域的人員和非技術(shù)人員亭罪,我們可以組建一個(gè)優(yōu)秀的故障排除團(tuán)隊(duì)。專(zhuān)家有時(shí)會(huì)忽略問(wèn)基本的問(wèn)題晃虫,而不太了解情況的員工可以問(wèn)清楚問(wèn)題皆撩,從而進(jìn)一步露出問(wèn)題中的隱藏假設(shè)。棘手的客戶(hù)問(wèn)題讓人干到焦慮哲银,所以讓團(tuán)隊(duì)聚在一起解決問(wèn)題可以緩解緊張氣氛扛吞,提高士氣。有時(shí)可以邀請(qǐng)我們的客戶(hù)參加荆责; 這通忱谋龋可以加快過(guò)程,甚至提出更多的假設(shè)做院。

當(dāng)作為一個(gè)團(tuán)隊(duì)進(jìn)行故障排除時(shí)盲泛,我們可以使用一塊白板濒持,將其分成一個(gè)表格,如上所述寺滚。每個(gè)人都可以得到一份講義柑营,列出表格中每條每列要問(wèn)的問(wèn)題。

與本書(shū)相關(guān)的網(wǎng)站上有用于分析故障排除的輔助材料和講義村视。

當(dāng)我們自己進(jìn)行故障排除時(shí)官套,列出所有問(wèn)題并將它們填入表格是一種很好的方法。遠(yuǎn)離電腦(或代碼層面)蚁孔,列舉出要檢查的項(xiàng)目清單是很好的奶赔,因?yàn)檫@樣可以消除深入研究細(xì)節(jié)的直接沖動(dòng)。 相反杠氢,一旦有了要跟蹤的項(xiàng)目清單站刑,就可以確定工作的優(yōu)先級(jí)。

我們首先在 IS 列中填寫(xiě)詳細(xì)信息鼻百。然后绞旅,我們填寫(xiě) IS NOT 列。通常愕宋,我們會(huì)注意到網(wǎng)格中沒(méi)有數(shù)據(jù)的空白區(qū)域玻靡。這是一個(gè)信號(hào)结榄,讓我們?nèi)ナ占嗟臄?shù)據(jù)或做更多的研究中贝。這樣做的目的是使 IS 和IS NOT 列之間的相關(guān)差異盡可能小。這使我們能夠得到一個(gè)可以測(cè)試的好假設(shè)臼朗,或者是可以?xún)?yōu)先被考慮測(cè)試的一些假設(shè)邻寿。

任何可能的問(wèn)題解決方案都必須 完全 解釋問(wèn)題規(guī)范中的 IS 和 IS NOT 部分。通常视哑,我們想到的第一個(gè)解決方案只能解釋了問(wèn)題規(guī)范中的部分問(wèn)題绣否。多花一點(diǎn)時(shí)間思考潛在的原因,或者多做一點(diǎn)研究挡毅,都是很好的時(shí)間投資蒜撮,尤其是當(dāng)嘗試不同的備選解決方案很困難或者很耗時(shí)的時(shí)候。

我們將了解系統(tǒng)規(guī)范及其在這些約束下運(yùn)行時(shí)的行為跪呈。事實(shí)上段磨,隨著新軟件和硬件的發(fā)布,系統(tǒng)會(huì)隨著時(shí)間的推移而發(fā)展耗绿。因此苹支,我們必須重復(fù)處理主要的信息源,并進(jìn)行實(shí)驗(yàn)來(lái)完善這種理解误阻。這使我們能夠發(fā)現(xiàn)良好的問(wèn)題债蜜,并使我們能夠提出相關(guān)假設(shè)晴埂。在提出問(wèn)題,了解我們的系統(tǒng)寻定,然后發(fā)現(xiàn)新的相關(guān)問(wèn)題之間通常有一個(gè)積極的反饋循環(huán)儒洛。

如何提問(wèn)

  • WHAT IS

    • 什么出現(xiàn)了問(wèn)題?

    • 出現(xiàn)了怎樣的問(wèn)題狼速?

  • WHAT IS NOT

    • 哪些(版本晶丘、設(shè)備、情況等)可能出現(xiàn)問(wèn)題但是沒(méi)有唐含?

    • 哪些可能的故障并沒(méi)有一并出來(lái)浅浮?

  • WHERE IS

    • 當(dāng)發(fā)現(xiàn)問(wèn)題時(shí),其地理位置在哪里捷枯?

    • 問(wèn)題出在哪里滚秩?

  • WHERE IS NOT

    • 當(dāng)我們本該看到問(wèn)題卻沒(méi)有看到,那么問(wèn)題在哪里淮捆?

    • 問(wèn)題可能出現(xiàn)在什么地方郁油,但是并沒(méi)有

  • WHEN IS

    • 第一次發(fā)現(xiàn)問(wèn)題是什么時(shí)候?

    • 什么時(shí)候問(wèn)題又出現(xiàn)了攀痊?

    • 時(shí)間上有什么規(guī)律嗎桐腌?

    • 在事物的生命周期中某個(gè)時(shí)候才首次發(fā)現(xiàn)問(wèn)題?

  • WHEN IS NOT

    • 什么時(shí)候應(yīng)該可以發(fā)現(xiàn)問(wèn)題苟径,但并沒(méi)有案站?

    • 什么時(shí)候問(wèn)題應(yīng)該復(fù)現(xiàn),但并沒(méi)有棘街?

    • 在事物的生命周期中的某個(gè)時(shí)候應(yīng)該可以看到問(wèn)題蟆盐,但并沒(méi)有?

  • EXTENT IS

    • 這樣問(wèn)題到底有多少遭殉?

    • 缺陷的程度如何石挂?

    • 這個(gè)問(wèn)題有哪些缺陷?

    • 發(fā)展的趨勢(shì)是怎樣险污?

  • EXTENT IS NOT

    • 有哪些情況可能也有這個(gè)問(wèn)題痹愚,但實(shí)際上沒(méi)有?

    • 問(wèn)題可能?chē)?yán)重到什么程度蛔糯,但實(shí)際上不是拯腮?

    • 可能存在多少缺陷,但實(shí)際上沒(méi)有渤闷?

    • 問(wèn)題的趨勢(shì)應(yīng)該是怎樣疾瓮,但實(shí)際上不是?

問(wèn)題范例

首先飒箭,問(wèn)題說(shuō)明問(wèn)題似乎并不常見(jiàn)狼电,而且措辭笨拙蜒灰。 查看一些實(shí)際示例有助于更清楚地解釋事情。 這里將使用不同的假設(shè)示例來(lái)專(zhuān)注于特定問(wèn)題肩碟,但是為了簡(jiǎn)潔起見(jiàn)强窖,我們不會(huì)在任何給定示例上列舉全部問(wèn)題。

CameraApp What Is / Is Not 示例

思考一下這個(gè)問(wèn)題:“客戶(hù)按下 Apple 共享按鈕時(shí)削祈,相機(jī)應(yīng)用程序崩潰”

  • WHAT IS

    • What things have a problem?

      • iOS 10.1翅溺、10.2、10.3上的 1.4.5 版本的 CameraApp髓抑。

      • 在主線(xiàn)程中

      • 方法 isAllowedToShare()

      • Apple 的共享按鈕

    • What is wrong with them?

      • 共享按鈕導(dǎo)致應(yīng)用崩潰咙崎。
  • WHAT IS NOT

    • What things could have a problem but don't?

      • iOS 9.3.5 上的 1.4.4 版本的 CameraApp。

      • 后臺(tái)線(xiàn)程從來(lái)沒(méi)發(fā)生崩潰吨拍。

      • 其他功能和拍照功能正常褪猛。

      • 拍照按鈕正常工作。

    • What could be wrong but is not?

      • 其他按鈕可能會(huì)導(dǎo)致崩潰羹饰,但可以正常工作伊滋。

      • 我們沒(méi)有看到任何系統(tǒng)彈出錯(cuò)誤。

為了取得進(jìn)展队秩,我們需要配合并收緊IS和IS NOT答案笑旺。 我們首先看一下 IS NOT 部分,因?yàn)樗ǔJ潜砀竦囊幻驸勺剩喈?dāng)空泛筒主,需要一些思想和啟發(fā)才能得出與 IS 部分相關(guān)的額外 IS NOT 答案。

顯而易見(jiàn)的事情是迷帜,應(yīng)用程序版本 1.4.4 是否可以在 iOS 10.x上運(yùn)行物舒。

iOS 10.x是iOS 9.3.5的主要更新色洞,因此其規(guī)范和對(duì)應(yīng)用程序的要求將有所不同戏锹。 因此,接下來(lái)要看的是Apple文檔中的 What's New 部分火诸,從更高的角度查看iOS 10.x over 9.x的新增功能锦针。 這將促使我們提出更為清晰的問(wèn)題。

如果 10.x 要求應(yīng)用程序具有某些 Info.plist 設(shè)置置蜀,則可以在上方的表格中并沒(méi)有解釋相機(jī)應(yīng)用程序中的任何 Info.plist 差異奈搜,以及與其他已知可用的應(yīng)用程序的 Info.plist 在執(zhí)行共享的 iOS 10.x 和 9.x上的差異。

在此示例中盯荤,共享按鈕是有問(wèn)題的馋吗。 我們可以獲得使用共享按鈕的一些示例代碼,并查看它是否在與我們的問(wèn)題類(lèi)似的環(huán)境中崩潰秋秤。 我們可以在獨(dú)立的應(yīng)用程序中測(cè)試代碼宏粤,也可以將其移植到我們的 Camera App 中以查看其是否可以正常工作脚翘。

在此示例中,我們只說(shuō)系統(tǒng)并未彈出窗口绍哎。那么控制臺(tái)消息如何来农? 我們可能會(huì)發(fā)現(xiàn)系統(tǒng)告訴我們系統(tǒng)崩潰我們的應(yīng)用程序的原因。

候選解決方案將是 “iOS 10.x需要不同的 Info.plist 設(shè)置才能正常工作崇堰,否則如我們所見(jiàn)沃于,系統(tǒng)將指定使我們的應(yīng)用程序崩潰『;澹”

iMac Where Is / Is Not 示例

思考一下這個(gè)問(wèn)題:“ iMac 經(jīng)常崩潰繁莹,需要不斷地進(jìn)行硬件維修√蒯#”

  • WHERE IS

    • When the problem was noticed, where was it geographically?

      • 放置在一樓轉(zhuǎn)角處靠窗的的一臺(tái) Apple iMac蒋困。
    • Where is the problem on the thing?

      • 問(wèn)題出在電源,屏幕敬辣,主系統(tǒng)板和內(nèi)存芯片上的電氣故障(多次出現(xiàn)問(wèn)題)雪标。
  • WHERE IS NOT

    • Where could the thing be when we should have seen the problem but did not?

      • 相同的 Apple iMac 放在地下室,在 IT 部門(mén)登臺(tái)區(qū)域以及在 Apple 工廠(chǎng)進(jìn)行測(cè)試時(shí)都很好溉跃。
    • Where could the problem be on the thing but isn't?

      • 問(wèn)題可能出在軟件中村刨,但不是。

      • 問(wèn)題可能出在USB外設(shè)上撰茎,但不是嵌牺。

      • 問(wèn)題可能是打印機(jī),臺(tái)燈龄糊,照明燈或空調(diào)出現(xiàn)電氣故障逆粹,但不是。

      • 問(wèn)題可能出在辦公桌抽屜中的筆記本電腦上了炫惩,但事實(shí)并非如此僻弹。

在此示例中, IS NOT 列中有許多項(xiàng)他嚷。立刻讓我們感覺(jué)像是可以因此考慮好的假設(shè)蹋绽。 與此相反,在前面的示例中筋蓖,WHAT IS NOT 部分中卸耘,我們?cè)谔岢黾僭O(shè)之前必須進(jìn)行大量研究。

我們注意到只有iMac有問(wèn)題粘咖,而打印機(jī)沒(méi)有問(wèn)題蚣抗。那么如果我們交換打印機(jī)和iMac的位置,因?yàn)樗鼈兌际敲舾械碾娮赢a(chǎn)品瓮下,我們可以在 IS 和 IS NOT 之間獲得很好的對(duì)比翰铡。

電子設(shè)備只能在特定的特定環(huán)境條件下運(yùn)行设哗。 需要正確的電壓,電流两蟀,溫度网梢,濕度,有限的電磁干擾等赂毯。 如果我們?cè)谶M(jìn)行現(xiàn)場(chǎng)調(diào)查時(shí)考慮到此類(lèi)需求規(guī)范战虏,則可以發(fā)現(xiàn)造成此特定位置問(wèn)題的原因。 我們也可以嘗試使用電涌保護(hù)器党涕,也可以不使用電涌保護(hù)器烦感,因?yàn)楸娝苤娫醇夥鍟?huì)損壞電子設(shè)備膛堤。

數(shù)據(jù)庫(kù)應(yīng)用 When Is / Is Not 示例

思考一下這個(gè)問(wèn)題:”應(yīng)用審查期間一個(gè)數(shù)據(jù)庫(kù)應(yīng)用崩潰“

  • WHEN IS

    • When was the problem first noticed?

      • 我們第一次發(fā)現(xiàn)此問(wèn)題 App Store 應(yīng)用審核期間手趣。
    • When has the problem been seen again?

      • 第二次是我們將該應(yīng)用提交審核。
    • Is there any pattern in the timing?

      • 啟動(dòng)應(yīng)用后肥荔,問(wèn)題發(fā)生的時(shí)間相同绿渣。
    • When in the lifecycle of the thing was the problem first noticed?

      • 問(wèn)題始終在應(yīng)用啟動(dòng)過(guò)程中。
  • WHEN IS NOT

    • When could the problem have been noticed but wasn't?

      • 開(kāi)發(fā)人員在開(kāi)發(fā)環(huán)境中從未見(jiàn)過(guò)該問(wèn)題燕耿。
    • When could it have been seen again but wasn't?

      • 隨后啟動(dòng)該應(yīng)用程序也運(yùn)行的很好中符。
    • When else in the lifecycle of the thing could the problem be seen but wasn't?

      • 在應(yīng)用程序中按更新按鈕或更改目標(biāo)數(shù)據(jù)庫(kù)連接字符串時(shí),未發(fā)現(xiàn)問(wèn)題誉帅。

顯然淀散,這是一個(gè)應(yīng)用程序啟動(dòng)問(wèn)題。 這個(gè)例子強(qiáng)調(diào)了有時(shí)候一個(gè)領(lǐng)域的問(wèn)題會(huì)觸發(fā)另一個(gè)領(lǐng)域的問(wèn)題和研究蚜锨。 對(duì)于 WHAT IS / IS NOT 部分來(lái)說(shuō)档插,環(huán)境的干凈程度以及啟動(dòng)環(huán)境的配置狀態(tài)是顯而易見(jiàn)的問(wèn)題。

在 WHEN is NOT 部分發(fā)現(xiàn)了一條線(xiàn)索亚再」牛可以設(shè)置和重新配置數(shù)據(jù)庫(kù)連接字符串≌胗啵可能是一個(gè)空連接字符串饲鄙,或者缺少設(shè)置,或者沒(méi)有觸發(fā)第一次使用的設(shè)置代碼圆雁。也許調(diào)試版本的代碼會(huì)跳過(guò)第一次使用的工作流來(lái)加速功能開(kāi)發(fā),但是這些功能在用于應(yīng)用商店審查的應(yīng)用程序的發(fā)布部署中并不存在帆谍。

游戲應(yīng)用 Extent Is / Is Not 示例

思考一下這個(gè)問(wèn)題:”在游戲的不同級(jí)別(關(guān)卡或者等級(jí))伪朽,AlienGame 應(yīng)用都會(huì)出現(xiàn)性能問(wèn)題/崩潰“

  • EXTENT IS

    • How many things have the problem?

      • 500個(gè)安裝了該應(yīng)用不同設(shè)備,總共有2000個(gè)汛蝙。
    • What is the extent of the defect?

      • 有時(shí)很?chē)?yán)重烈涮; 崩潰了朴肺。有時(shí)很溫和;掉幀了坚洽。

      • 有時(shí)幀率始終保持良好狀態(tài)戈稿。

    • How many defects are on the thing?

      • 5 種不同類(lèi)型的游戲渲染線(xiàn)程最終會(huì)崩潰(在不同情況下)。
    • What is the trend?

      • 隨著我們的安裝量的增長(zhǎng)讶舰,崩潰數(shù)量略有下降的趨勢(shì)鞍盗。
  • EXTENT IS NOT

    • How many things could have the problem but don't?

      • 所有已安裝或未安裝的設(shè)備都有這個(gè)問(wèn)題,但是目前我們看到的是25%跳昼。
    • What could be the extent of the problem but isn't?

      • 我們從來(lái)沒(méi)有看到幀率下降然后提高般甲。

      • 我們從來(lái)沒(méi)有見(jiàn)過(guò)好的安裝程序能夠解決崩潰問(wèn)題或掉幀問(wèn)題。

    • How many defects could be present but aren't?

      • 我們從沒(méi)看過(guò)主線(xiàn)程崩潰鹅颊。

      • 在 6 種類(lèi)型的渲染線(xiàn)程中敷存,有一種是特殊的,因?yàn)樗鼜奈丛诒罎⒒驇氏陆颠^(guò)程中出現(xiàn)過(guò)堪伍。

    • What could the trend be but isn't?

      • 趨勢(shì)可能由崩潰變得越來(lái)越普遍(超過(guò)25%)锚烦,但沒(méi)有。

      • 趨勢(shì)可能是崩潰僅在某些日子發(fā)生帝雇,但事實(shí)并非如此挽牢。

這個(gè)例子很難理解。 我們需要了解應(yīng)用程序的架構(gòu)才能提出好的問(wèn)題摊求。 一些線(xiàn)索出現(xiàn)了禽拔。 渲染線(xiàn)程有6種類(lèi)型,其中一種很好室叉。 另外睹栖,主線(xiàn)程很好。 我們需要探索線(xiàn)程之間的相關(guān)差異茧痕。

當(dāng)我們遇到的問(wèn)題并不總是發(fā)生時(shí)野来,一種策略是考慮可以采取什么措施使問(wèn)題變得更糟,從而更頻繁地發(fā)生踪旷。 然后曼氛,當(dāng)我們有一個(gè)候選解決方案時(shí),我們可以設(shè)置一個(gè)置信度閾值(沒(méi)有看到失敗的迭代次數(shù))令野,并在使問(wèn)題更有可能出現(xiàn)的特殊環(huán)境中針對(duì)這個(gè)閾值測(cè)試修復(fù)舀患。

另一個(gè)線(xiàn)索是 25% 的用戶(hù)設(shè)備有問(wèn)題。 如果問(wèn)題是由于使用不同的硬件而導(dǎo)致的气破,因此硬件功能各不相同聊浅,那么我們可以看到大約有25% 的用戶(hù)使用 iPad 而不是 iPhone。 但是,嚴(yán)格說(shuō)來(lái)這 25% 的問(wèn)題并沒(méi)有明確告訴我們低匙,環(huán)境中的其他因素可能會(huì)影響應(yīng)用程序的行為旷痕。也許在安裝過(guò)程中,服務(wù)器是在托管游戲后端的四臺(tái)服務(wù)器中以循環(huán)方式選擇的顽冶。 此外欺抗,在開(kāi)發(fā)過(guò)程中,使用的服務(wù)器也許是與我們的客戶(hù)使用的生產(chǎn)服務(wù)器不同的特殊開(kāi)發(fā)服務(wù)器强重。 同樣绞呈,IS NOT 部分提供了有關(guān)在哪里尋找潛在解決方案的最有啟發(fā)性的線(xiàn)索。

如果我們不進(jìn)行分析性故障排除竿屹,則在此示例中报强,第一個(gè)本能將是檢查內(nèi)存泄漏,內(nèi)存壓力拱燃,硬件限制等秉溉。這種分析很容易會(huì)花費(fèi)一周的工程時(shí)間。 雖然此類(lèi)問(wèn)題有可能導(dǎo)致丟幀而無(wú)法完全解釋我們所看到的缺陷模式碗誉; 他們不會(huì)解釋為什么恰好有25%的用戶(hù)遇到了這個(gè)問(wèn)題召嘶。

2018 MacBook Pro T2 的問(wèn)題

本節(jié)描述了 2018 款 MacBook Pro 電腦崩潰的問(wèn)題 敘述來(lái)自受影響用戶(hù)的討論組發(fā)布和媒體報(bào)道

問(wèn)題描述: 2018 MacBook Pro 計(jì)算機(jī)在休眠期間因 Bridge OS 錯(cuò)誤而崩潰。

  • WHAT IS

    • What things have a problem?

      • MacBook Pro Mid 2018 (13-inch, 15-inch)

      • iMac Pro

      • iBridge2,1

      • iBridge2,3

      • 連接了 USB 外接設(shè)備的配置實(shí)例

      • 沒(méi)有外接 USB 設(shè)備的配置實(shí)例哮缺,從休眠中喚醒

      • 沒(méi)有外接USB 設(shè)備而是連接電源適配器的配置實(shí)例弄跌,從休眠中喚醒

      • 具有舊版內(nèi)核擴(kuò)展的配置實(shí)例(xbox控制器)

      • 刪除了xboxcontroller的配置實(shí)例(較少崩潰)

      • macOS High Sierra 10.13.6,帶有補(bǔ)充更新尝苇,來(lái)自抹除磁盤(pán)和全新安裝

      • 休眠期間發(fā)生崩潰

      • panic: ANS2 Recoverable Panic - assert failed

      • panic: macOS watchdog detected

      • panic: x86 global reset detected

      • panic: x86 CPU CATERR detected

      • 具有 DiskUtility->First Aid crypto_val 錯(cuò)誤的實(shí)例

      • 具有抹除磁盤(pán)以消除 crypto_val 錯(cuò)誤的實(shí)例

      • 使用相同的客戶(hù)配置但是完全替換了 MacBook Pro 硬件

      • 在 2018 MacBook Pro 中禁用了 Power Nap

      • 不觸摸觸控欄仍存在休眠/喚醒問(wèn)題

    • What is wrong with them?

      • 系統(tǒng)在Bridge OS 出問(wèn)題后重新啟動(dòng)

      • 電腦發(fā)燙

      • 磁盤(pán)檢查失敗

      • 外接設(shè)備被虛假喚醒

  • WHAT IS NOT

    • What things could have a problem but don't?

      • MacBook Pro Mid 2017 models or older MacBook Pros

      • iBridge1,1

      • MacBook Pro booted in Safe Mode

      • iPad, iPhone, Apple Watch

    • What could be wrong but is not?

      • 在電腦運(yùn)行時(shí)從未出現(xiàn)問(wèn)題

      • 在引導(dǎo)過(guò)程中從來(lái)沒(méi)有問(wèn)題

      • 當(dāng)用戶(hù)關(guān)閉系統(tǒng)后铛只,從未出現(xiàn)問(wèn)題

  • WHERE IS

    • When the problem was noticed, where was it geographically?

      • 在客戶(hù)處

      • 在書(shū)桌上和手提電腦包中

    • Where is the problem on the thing?

      • 在T2芯片(源自watchOS)中的BridgeOS操作系統(tǒng)軟件
  • WHERE IS NOT

    • Where could the thing be when we should have seen the problem but did not?

      • Apple 硬件驗(yàn)證工具(大概-只有Apple知道)
    • Where could the problem be on the thing but isn't?

      • 在主 CPU 或主板上

      • 在引導(dǎo)加載程序上

      • 在多媒體芯片和網(wǎng)絡(luò)芯片上(它們都有自己的操作系統(tǒng))

  • WHEN IS

    • When was the problem first noticed?

      • 大約30分鐘的休眠后,然后喚醒計(jì)算機(jī)
    • When has the problem been seen again?

      • 隨機(jī)糠溜,大概一天一次或一周五次
    • Is there any pattern in the timing?

      • 至少在運(yùn)行 30 分鐘后淳玩,進(jìn)入休眠狀態(tài)
    • When in the lifecycle of the thing was the problem first noticed?

      • 客戶(hù)購(gòu)買(mǎi)并安裝軟件后

      • 重新安裝后

      • 重新抹除磁盤(pán)并安裝后

  • WHEN IS NOT

    • When could the problem have been noticed but wasn't?

      • 在 Apple 的組裝和驗(yàn)證機(jī)構(gòu)(大概-只有Apple知道)
    • When could it have been seen again but wasn't?

      • 退回設(shè)備的退貨部門(mén)(大概-只有Apple知道)
    • When else in the lifecycle of the thing could the problem be seen but wasn't?

      • 主動(dòng)使用計(jì)算機(jī)期間從未休眠
  • EXTENT IS

    • How many things have the problem?

      • 通過(guò)間接測(cè)量,在 iMac Pro 服務(wù)退貨中非竿,在 103 個(gè)中有 4個(gè)發(fā)現(xiàn)此問(wèn)題
    • What is the extent of the defect?

      • 內(nèi)核問(wèn)題蜕着,看起來(lái)是一種內(nèi)核問(wèn)題,可能有三種
    • How many defects are on the thing?

      • 單實(shí)例內(nèi)核緊急故障
    • What is the trend?

      • 在未來(lái)的隨機(jī)休眠期后再次重復(fù)红柱,有時(shí)不使用外圍設(shè)備時(shí)復(fù)現(xiàn)的頻率較低
  • EXTENT IS NOT

    • How many things could have the problem but don't?

      • 有一個(gè)引導(dǎo)加載程序承匣,主操作系統(tǒng)和其他電子部件,它們從未出現(xiàn)問(wèn)題
    • What could be the extent of the problem but isn't?

      • 故障崩潰后可能會(huì)持續(xù)發(fā)生故障锤悄,但這沒(méi)有看到韧骗。

      • 每臺(tái)機(jī)器可能會(huì)出現(xiàn)一次故障,但又會(huì)再次出現(xiàn)故障

    • How many defects could be present but aren't?

      • 可能是警告或信息性消息铁蹈,但我們只發(fā)現(xiàn)故障
    • What could the trend be but isn't?

      • 每個(gè)客戶(hù)的問(wèn)題都是隨機(jī)發(fā)生的宽闲,但從未增加或減少

故障分析

以上信息類(lèi)似于我們?cè)诶щy問(wèn)題中經(jīng)持谡#看到的信息握牧。 WHAT IS 列中有很多數(shù)據(jù)容诬。

首要的主要結(jié)論是問(wèn)題必須出在 iMac Pro 和 MacBook Pro 中使用的較新的 T2 芯片。 缺陷的模式和實(shí)際的故障(在 T2 芯片上運(yùn)行的Bridge OS 中)清楚地表明了這一點(diǎn)沿腰。

第二點(diǎn)是失敗的數(shù)量很少览徒。與 MacBook Pro 相比,iMac Pro 是小批量計(jì)算機(jī)颂龙,因此該問(wèn)題很可能在 iMac Pro 生產(chǎn)過(guò)程中曾出現(xiàn)過(guò)习蓬,但這并不是由于它發(fā)生故障的可能性很小。

我們看到問(wèn)題永遠(yuǎn)不會(huì)在啟動(dòng)措嵌,有序關(guān)閉或頻繁使用期間發(fā)生躲叼。 這很有趣,因?yàn)樵谟布?yàn)證期間企巢,通常會(huì)對(duì)計(jì)算機(jī)進(jìn)行壓力測(cè)試以解決問(wèn)題枫慷。 它們通常不會(huì)處于睡眠狀態(tài)以查看它們是否仍執(zhí)行喚醒功能。 因此浪规,可能存在測(cè)試策略問(wèn)題或听。

對(duì)于客戶(hù)來(lái)說(shuō),替換硬件后仍然存在相同的問(wèn)題笋婿。 這是一個(gè)有用的信息誉裆,因?yàn)樗砻髁巳毕莸姆€(wěn)定性。 隨著時(shí)間的流逝缸濒,Apple 將收集已知有問(wèn)題的計(jì)算機(jī)足丢,因此可以進(jìn)行驗(yàn)證的有缺陷的計(jì)算機(jī)數(shù)量將大大改善。

上述數(shù)據(jù)集的主要缺陷是沒(méi)有 pmset日志庇配。 這是提供詳細(xì)的睡眠/喚醒行為日志斩跌。

潛在的關(guān)鍵數(shù)據(jù)點(diǎn)是使用安全模式啟動(dòng)的客戶(hù)從未發(fā)現(xiàn)此問(wèn)題。 那么關(guān)于 Bridge OS 的行為讨永,安全模式啟動(dòng)有什么特別之處嗎滔驶?

看來(lái)30分鐘是睡眠時(shí)間的關(guān)鍵指標(biāo)。那么 30 分鐘時(shí)可能會(huì)有一個(gè)閾值卿闹,也許要進(jìn)入深度休眠而不是淺休眠揭糕。

理解該問(wèn)題的一種策略是使其更頻繁地發(fā)生。 例如锻霎,通過(guò)手段有可能使計(jì)算機(jī)非持牵快速地進(jìn)入深度休眠狀態(tài)。 這就會(huì)使問(wèn)題在 30 秒后出現(xiàn)旋恼,而不是在 30 分鐘的休眠后隨機(jī)出現(xiàn)吏口。

如果可以使問(wèn)題更加頻繁,則可以編寫(xiě)自動(dòng)系統(tǒng)測(cè)試。 然后产徊,對(duì) Bridge OS 的任何修復(fù)都將具有強(qiáng)大的測(cè)試組件來(lái)對(duì)其進(jìn)行驗(yàn)證昂勒。

我們沒(méi)有 Bridge OS 的源代碼。所以辨別所看到的三個(gè)崩潰之間的差異將很有趣舟铜。 例如戈盈,有時(shí)有一個(gè)案例陳述包含 20 種可能的故障,而僅輸入一個(gè)谆刨。這揭示了有關(guān)問(wèn)題規(guī)范中 WHERE IS NOT 的信息塘娶。

我們沒(méi)有故障機(jī)器的寄存器信息。 當(dāng)發(fā)生底層問(wèn)題時(shí)痊夭,處理器文檔將使系統(tǒng)架構(gòu)師可以準(zhǔn)確地查找故障的種類(lèi)(超時(shí)刁岸,奇偶校驗(yàn)錯(cuò)誤等)。在我們的問(wèn)題規(guī)范中她我,我們需要更精確地確定問(wèn)題所在 WHERE虹曙。 BridgeOS 可能只是一個(gè)金絲雀,告訴我們其他地方的問(wèn)題鸦难。 一些客戶(hù)已收到完整的硬件更換根吁,但仍然看到問(wèn)題。 則表明是軟件問(wèn)題合蔽。

英特爾已經(jīng)描述了其架構(gòu)的更新击敌,該更新中可以發(fā)送 CATERR 信號(hào)而不是 IERR 或 MCERR。因此拴事,規(guī)范的更新可能意味著系統(tǒng)軟件不再兼容沃斤,因此 Bridge OS 需要更新。

一種方法是遵循英特爾調(diào)試指南刃宵。它有很多好的建議衡瓶。 當(dāng)BridgeOS遇到問(wèn)題時(shí),應(yīng)進(jìn)行更新寄存器以打印出相關(guān)的診斷牲证。

感謝你閱讀本文哮针! ??

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市坦袍,隨后出現(xiàn)的幾起案子十厢,更是在濱河造成了極大的恐慌,老刑警劉巖捂齐,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蛮放,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡奠宜,警方通過(guò)查閱死者的電腦和手機(jī)包颁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)瞻想,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人娩嚼,你說(shuō)我怎么就攤上這事蘑险。” “怎么了待锈?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵漠其,是天一觀(guān)的道長(zhǎng)嘴高。 經(jīng)常有香客問(wèn)我竿音,道長(zhǎng),這世上最難降的妖魔是什么拴驮? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任春瞬,我火速辦了婚禮,結(jié)果婚禮上套啤,老公的妹妹穿的比我還像新娘宽气。我一直安慰自己,他們只是感情好潜沦,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開(kāi)白布萄涯。 她就那樣靜靜地躺著,像睡著了一般唆鸡。 火紅的嫁衣襯著肌膚如雪涝影。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,287評(píng)論 1 301
  • 那天争占,我揣著相機(jī)與錄音燃逻,去河邊找鬼。 笑死臂痕,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播雷蹂,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼也物,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了澡绩?” 一聲冷哼從身側(cè)響起稽揭,我...
    開(kāi)封第一講書(shū)人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎英古,沒(méi)想到半個(gè)月后淀衣,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡召调,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年膨桥,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蛮浑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡只嚣,死狀恐怖沮稚,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情册舞,我是刑警寧澤蕴掏,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站调鲸,受9級(jí)特大地震影響盛杰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜藐石,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一即供、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧于微,春花似錦逗嫡、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至恋腕,卻和暖如春抹锄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背吗坚。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工祈远, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人商源。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓车份,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親牡彻。 傳聞我的和親對(duì)象是個(gè)殘疾皇子扫沼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

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