Mac OS App崩潰日志解析方法

最近分析了一波上傳的crash日志骏掀,方法和iOS的幾乎一模一樣鸠澈,畢竟都是蘋(píng)果的東西。這里對(duì)于一些基礎(chǔ)的crash日志里面的信息不作解釋?zhuān)唤榻B如何符號(hào)化crashlog獲取具體的崩潰代碼位置,方便以后自己查閱截驮。第一次寫(xiě)文章水平有限笑陈,有不對(duì)的地方希望大家指出,共同學(xué)習(xí)葵袭,共同進(jìn)步涵妥!

首先需要獲取你發(fā)布產(chǎn)品的dSYM文件,如果你上線(xiàn)的產(chǎn)品是在本地打包的話(huà)坡锡,最好保存一份Xcode生成的.dSYM文件蓬网。如果是統(tǒng)一用服務(wù)器打包的話(huà)窒所,應(yīng)該會(huì)保存有一份.dSYM文件,例如上傳到192.../** 文件夾下帆锋,如果沒(méi)有吵取,建議錘死搭建環(huán)境的人。

接下來(lái)锯厢,打開(kāi)crash文件皮官,查看是否已經(jīng)符號(hào)化。crash文件大體分為3種:Unsymbolicated(未符號(hào)化)实辑、Partially Symbolicated(半符號(hào)化)和 Fully Symbolicated(符號(hào)化)臣疑。

Crash Report類(lèi)別

一般我們拿到的.crash都是Unsymbolicated。在符號(hào)化之前徙菠,首先確保.crash文件相關(guān)崩潰模塊的uuid和相關(guān)崩潰模塊的.dSYM的uuid一致讯沈,這樣得到的結(jié)果才是準(zhǔn)確的。這里為什么說(shuō)相關(guān)崩潰模塊呢婿奔,稍后再做解析缺狠。

dwarfdump獲取uuid

通過(guò)dwarfdump --uuid <Path to dSYM file>得到.dSYM的uuid(<>不需要)。例如得到的uuid:17D96A43-531E-3E3C-9399-A7D1FCCD015F萍摊。這個(gè)和.crash上的uuid:17d96a43531e3e3c9399a7d1fccd015f一致挤茄,所以我們可以獲得正確的偏移結(jié)果。
那么怎么看.crash 文件崩潰模塊的uuid呢冰木?如下圖:


Information from the crash report that is needed to use

其中TheElements即為崩潰的模塊穷劈,app可能由多個(gè)framework,多個(gè)bundle組成踊沸,所以TheElements有可能就是你的app名字歇终,也有可能是某個(gè)bundle或者某個(gè)framework的名字。所以剛才說(shuō):相關(guān)崩潰模塊的uuid和相關(guān)崩潰模塊的.dSYM的uuid逼龟。

dwarfdump獲取具體崩潰代碼信息

a.獲取符號(hào)表中的TEXT段起始地址

$otool -l <Path to dSYM file>/Contents/Resources/DWARF/<binary image name>

找到如下的運(yùn)行結(jié)果:

Load command 2
      cmd LC_SEGMENT_64
  cmdsize 1032
  segname __TEXT
   vmaddr 0x0000000000000000
   vmsize 0x0000000000023000
  fileoff 0
 filesize 0
  maxprot 0x00000007
 initprot 0x00000005
   nsects 12
    flags 0x0

其中vmaddr 0x0000000000000000即為起始地址评凝。

b.崩潰信息還原

首先找到崩潰的地址。例如:

7  TheElements                0x0000000109ae552a 0x109ae3000 + 9514

其中9514(0x252A)就是偏移量腺律,實(shí)際堆棧地址可由下面公式來(lái)計(jì)算:

實(shí)際堆棧地址 =  TEXT段起始地址 + 偏移量

所以計(jì)算的出結(jié)果為:0x252A奕短。

在終端輸入如下命令:

dwarfdump --arch <Binary Architecture> <Path to dSYM file> --lookup 0x252a

<Binary Architecture>,可以通過(guò).crash文件信息得到匀钧。比如Mac OS的應(yīng)用程式為:x86_64翎碑,iOS的為:arm64等。
得到結(jié)果:

Line table file: 'TSDownloadObj.m' line 164, column 13 with start address 0x0000000000002522
Looking up address: 0x000000000000252a in .debug_frame... not found.

所以崩潰的代碼所在文件為T(mén)SDownloadObj.m之斯,行號(hào)為164日杈。

通過(guò)atos符號(hào)化Crash Report

通過(guò)上面的步驟確認(rèn)uuid一致后,輸入如下命令:

atos -arch <Binary Architecture> -o <Path to dSYM file>/Contents/Resources/DWARF/<binary image name> -l <load address> <address to symbolicate>

例如:

atos -arch x86_64 -o <Path to dSYM file>/Contents/Resources/DWARF/<binary image name> -l 0x109ae3000 0x0000000109ae552a

得到如下結(jié)果:

-[TSDownloadObj URLSession:task:didCompleteWithError:] (in TheElements) (TSDownloadObj.m:164)

這樣得到的結(jié)果和dwarfdump的結(jié)果一模一樣。

蘋(píng)果官方文獻(xiàn)

如果沒(méi)有.dSYM文件达椰,那么就比較麻煩了翰蠢,需要符號(hào)化.crash的話(huà)项乒,必須保證本地或者服務(wù)器上路徑:~/Library/Developer/Xcode/DerivedData/YOUR_PROJECT_CONFIGFILE存在啰劲,即可通過(guò)dsymutil命令提取.dSYM文件。

dsymutil appName.app/Contents/MacOS/appName

如果上述路徑不存在的話(huà)檀何,雖然能提取出.dSYM文件蝇裤,但是這個(gè)文件是不能用來(lái)符號(hào)化的。路徑不存在的話(huà)運(yùn)行上述命令會(huì)得到一堆類(lèi)似如下的警告:

warning: (x86_64) /***/***/Library/Developer/Xcode/DerivedData/***-bivwwbqnjqxnlrcoeospkrentncw/Build/Intermediates.noindex/***.build/Release/***.build/Objects-normal/x86_64/TUILinkTextField.o unable to open object file: No such file or directory
***-bivwwbqnjqxnlrcoeospkrentncw即為YOUR_PROJECT_CONFIGFILE频鉴。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末栓辜,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子垛孔,更是在濱河造成了極大的恐慌藕甩,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件周荐,死亡現(xiàn)場(chǎng)離奇詭異狭莱,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)概作,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)腋妙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人讯榕,你說(shuō)我怎么就攤上這事骤素。” “怎么了愚屁?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵济竹,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我霎槐,道長(zhǎng)规辱,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任栽燕,我火速辦了婚禮罕袋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘碍岔。我一直安慰自己浴讯,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布蔼啦。 她就那樣靜靜地躺著榆纽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上奈籽,一...
    開(kāi)封第一講書(shū)人閱讀 52,441評(píng)論 1 310
  • 那天饥侵,我揣著相機(jī)與錄音,去河邊找鬼衣屏。 笑死躏升,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的狼忱。 我是一名探鬼主播膨疏,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼钻弄!你這毒婦竟也來(lái)了佃却?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤窘俺,失蹤者是張志新(化名)和其女友劉穎饲帅,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體瘤泪,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡灶泵,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了均芽。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片丘逸。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖掀宋,靈堂內(nèi)的尸體忽然破棺而出深纲,到底是詐尸還是另有隱情,我是刑警寧澤劲妙,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布湃鹊,位于F島的核電站,受9級(jí)特大地震影響镣奋,放射性物質(zhì)發(fā)生泄漏币呵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一侨颈、第九天 我趴在偏房一處隱蔽的房頂上張望余赢。 院中可真熱鬧,春花似錦哈垢、人聲如沸妻柒。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)举塔。三九已至绑警,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間央渣,已是汗流浹背计盒。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留芽丹,地道東北人北启。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像志衍,于是被迫代替她去往敵國(guó)和親暖庄。 傳聞我的和親對(duì)象是個(gè)殘疾皇子聊替,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

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

  • 前言 本文主要內(nèi)容為:kolla部署的容器化mairadb galera集群的恢復(fù)及相關(guān)基礎(chǔ)知識(shí)楼肪。 簡(jiǎn)介 Gale...
    lzp1234閱讀 4,840評(píng)論 0 1
  • iOS開(kāi)發(fā) - CocoaPods的常見(jiàn)使用方式 https://www.cnblogs.com/hs-funky...
    itlover2013閱讀 360評(píng)論 0 0
  • iOS開(kāi)發(fā)小伙伴們注意了!H乔摹春叫! Xcode10.1并沒(méi)有修復(fù)使用Xcode10打包上線(xiàn)后 造成iOS9.1 ~iO...
    洛河水手閱讀 268評(píng)論 0 0
  • 今日春分,來(lái)一朵花應(yīng)應(yīng)景泣港! 花朵一直都是我最想畫(huà)的暂殖,以前總是看別人畫(huà)的生動(dòng),如今我也在自學(xué)水彩当纱,首先就是畫(huà)花呛每。這朵...
  • 程序設(shè)計(jì)方法與風(fēng)格 1.設(shè)計(jì)方法:指設(shè)計(jì)與編制、調(diào)試程序的方法和過(guò)程坡氯,主要有結(jié)構(gòu)化程序設(shè)計(jì)方法晨横、軟件工程方法和面向...
    十月三十當(dāng)歸閱讀 549評(píng)論 0 0