dSYM崩潰日志分析(轉(zhuǎn))

First

相信有很多開發(fā)者在項目中加入了友盟統(tǒng)計,其中一個最主要的功能就是查看線上版本統(tǒng)計到的錯誤淘这。但是當(dāng)你看到這樣的信息時:

會不會有這樣的想法:

這尼瑪?shù)降资鞘裁垂戆郏浚。?/p>

此時你可能會百度(干得漂亮B燎睢)朦乏,我相信你“閃閃”的雙眼肯定會看到這篇文章的:dSYM文件分析工具。具體用法我就不重復(fù)了氧骤,博主寫的很詳細呻疹,而且這個工具真的真的很好用!

Second

但是,友盟還統(tǒng)計到了這么一堆錯誤:

這尼瑪又是什么鬼刽锤?D鞒摺!怎么會這么多并思!

點進去看到是這樣的:

用咱們上面說的工具:

這庐氮、這、這讓我怎么玩宋彼,還能不能愉快的玩耍了…T_T

當(dāng)然弄砍,這并不只在“Application received signal SIGSEGV (null)”這種情況下才發(fā)生,這時怎么辦呢?不要捉急输涕,少年請看這里:解析iOS崩潰日志(crash Log)音婶。

Third

上面這兩種方法應(yīng)該就可以解決大部分友盟統(tǒng)計到的錯誤了,這時你要說了莱坎,這兩種方法都解決不了的怎么辦衣式?少年,此次此刻我要傳授你一招江湖失傳很久的絕學(xué)秘笈:把那些無法解決的錯誤全部勾選上檐什,然后選擇把狀態(tài)標記為“處理中”碴卧,然后再標記為“已修復(fù)”,怎么樣乃正,騷年住册,是不是解決了!2333瓮具,但是少用為好荧飞,原因你懂的。

At last

最后感謝answer-huang裂云野的博文分享搭综。



【友盟統(tǒng)計報表解讀】之錯誤分析iOS版

錯誤分析功能說明

1.概述

錯誤分析是友盟為移動開發(fā)者提供的Crash收集和分析工具,幫助開發(fā)者監(jiān)測App在移動設(shè)備上的運行狀況划栓,及時發(fā)現(xiàn)并解決錯誤兑巾,提升App的穩(wěn)定性。

新版錯誤分析的主要功能點如下:

(1) 通過友盟后臺網(wǎng)站管理錯誤內(nèi)容忠荞。

您可以按照版本蒋歌、UUID、操作系統(tǒng)委煤、機型篩選錯誤; 還可以根據(jù)不同的條件為錯誤添加標簽堂油,便于快速分類及查找錯誤。

(2) 通過友盟錯誤分析工具定位錯誤碧绞。

您可以在友盟后臺網(wǎng)站批量導(dǎo)出錯誤府框,并借助命令行工具將錯誤快速定位到具體的代碼行數(shù)。

2.詳細說明2.1 錯誤列表頁

錯誤列表中展示的錯誤摘要的生成規(guī)則是讥邻,將收集Crash日志通過一定算法聚合后按照UUID拆分的錯誤的堆棧信息的第一行迫靖。

每天展示當(dāng)日發(fā)生的錯誤院峡,且每天至多展示1000條錯誤類型。當(dāng)錯誤類型超過1000條時系宜,當(dāng)日錯誤列表中的數(shù)據(jù)不再更新照激。次日恢復(fù)。

當(dāng)錯誤列表中超過1000條時盹牧,請在版本管理中取消不關(guān)注的版本俩垃;版本取消后,當(dāng)日不再接收該版本的錯誤汰寓,但不會減少當(dāng)日已接收的錯誤數(shù)口柳。

2.1.1 篩選

按照您為錯誤標記的狀態(tài)來篩選錯誤

選擇至多3個版本,只展示選中版本的數(shù)據(jù)

通過UUID來搜索錯誤

通過操作系統(tǒng)或機型來篩選錯誤

通過自定義標簽來篩選錯誤踩寇,同時可添加新標簽或刪除標簽

2.1.2 標記

(1) 添加標記

選中相應(yīng)的錯誤 啄清,可以為其添加多個標簽或標記為已修復(fù)/未修復(fù)。

為選中的錯誤添加標簽

為選中的錯誤標記修復(fù)狀態(tài)俺孙,便于跟蹤錯誤

(2) 修改或刪除標記

如果想修改標簽辣卒,需進入錯誤詳情頁進行修改

2.1.3 導(dǎo)出

導(dǎo)出當(dāng)前頁面內(nèi)的全部錯誤,或?qū)С鲈擁撁鎯?nèi)勾選的錯誤

2.1.4 管理版本(1)查看今日接收的錯誤數(shù)并進行版本管理

今日錯誤數(shù)展示的是今日收到的全部錯誤數(shù)(聚合后的錯誤類型數(shù))睛榄;當(dāng)今日錯誤類型超過1000個的限制時荣茫,此處的數(shù)據(jù)不再更新。

選擇接收錯誤信息的版本场靴,當(dāng)某版本取消選中時啡莉,該版本的錯誤信息將不再繼續(xù)接收。

(2)選擇接收錯誤的版本

該版本今日收到的總錯誤數(shù)

展開/收起UUID列表

2.2 錯誤詳情

錯誤詳情頁面展示的是錯誤詳細的stacktrace以及其他相關(guān)信息旨剥。

2.2.1 基本信息

包括錯誤的首次發(fā)生時間咧欣、最近一次發(fā)生時間、今天發(fā)生的次數(shù)以及出現(xiàn)的應(yīng)用版本轨帜。

該錯誤首次發(fā)生的時間

該錯誤最近一次的發(fā)生時間

該錯誤出現(xiàn)的總次數(shù)

發(fā)生該錯誤的應(yīng)用版本

2.2.2 終端概況

終端概況提供了設(shè)備魄咕,機型和操作系統(tǒng)的聯(lián)合分布信息,可以點擊查看分布詳情蚌父。

2.2.3 錯誤詳情

可以修改錯誤標簽哮兰,修改錯誤狀態(tài)。

修改錯誤的標簽

修改錯誤的已修復(fù)/未修復(fù)狀態(tài)

2.3 錯誤分析工具的使用

第一步下載錯誤分析工具并解壓zip得到umcrashtool文件苟弛,可將umcrashtool與已下載的xxx.csv文件放入同一目錄下喝滞。

第二步 在terminal中運行umcrashtool命令,參數(shù)為錯誤分析的.csv文件絕對路徑膏秫,如下:

sanzhang$ ./umcrashtool [absolutely_path_of_csv_file]

將umcrashtool與錯誤分析.csv文件放入同一目錄下

第三步 在terminal中運行umcrashtool右遭,提示如下: Usage: umcrashtool [export-file-path],定位后的代碼及行數(shù)會寫入錯誤分析-symbol.csv文件,與原文件在同一目錄下狸演。用工具打開新生成的xxx-symbol.csv文件言蛇,便可查看錯誤發(fā)生的源碼文件及行數(shù)。

注:如果錯誤分析沒有成功宵距,請先確保對應(yīng)的 xxx.dSYM 文件在 ~/Library/Developer/Xcode/ 或該路徑的子目錄下腊尚。(對于每一個產(chǎn)品發(fā)布時archive操作會將dsym文件存放到~/Library/Developer/Xcode/Archives路徑下,因此建議保留該路徑下的文件满哪,以便后續(xù)用工具分析錯誤婿斥。)

更詳細的使用教程見這里

3. FAQ

Q:錯誤類型超過1000個的限制該如何處理哨鸭?

A:每天至多展示1000個錯誤民宿,當(dāng)超過1000個的限制后,該日的數(shù)據(jù)不再更新像鸡。次日恢復(fù)活鹰。

當(dāng)超過限制后,您可以在版本管理中選擇接收錯誤的版本/UUID只估,對不關(guān)注的版本/UUID取消選中志群。取消選中的版本/UUID不再接收錯誤。

選擇您關(guān)注的版本/UUID接收錯誤蛔钙,關(guān)閉不關(guān)注的版本锌云,會降低次日錯誤超過1000的情況。

Q:為什么有些錯誤無法通過友盟提供的工具定位 吁脱?

A:因為您使用的SDK版本過低桑涎。 必須使用v2.1.3以后的SDK才能正確的定位Crash log。

Q:使用umcrashtool為什么沒有正確的翻譯出錯誤 兼贡?

A:您需要確保dSYM文件存放在/Users/xx/Library/Developer/Xcode/或者它的子目錄下攻冷,路徑中不要出現(xiàn)空字符。

Q:為什么生成的csv文件打開有亂碼遍希?

A:csv文件我們使用的UTF8編碼格式等曼,需要選用相應(yīng)的格式打開,在Mac平臺可以用系統(tǒng)自帶的Numbers或免費軟件LibreOffice打開孵班。目前的Microsoft Office for Mac 打開會有亂碼的問題涉兽。

Q:使用umcrashtool為什么沒有正確的翻譯出錯誤招驴?

A:首先請確保dSYM文件存放在 ~/Library/Developer/Xcode/或者它的子目錄下篙程。另外, 目前的錯誤捕捉工具針對一些系統(tǒng)信號導(dǎo)致的崩潰信息,存在無法解析的情況别厘,最后可能是dsym文件提供的信息量不夠虱饿,導(dǎo)致部分解析失敗。我們的技術(shù)人員一直在努力提高能夠捕獲和分析的崩潰的類型,如果您在這方面有建議氮发,也可以通過郵件support@umeng.com友盟開發(fā)者社區(qū)反饋給我們渴肉。






!K帷3鸺馈!颈畸!命令行工具解析Crash文件,dSYM文件進行符號化序

在日常開發(fā)中乌奇,app難免會發(fā)生崩潰。簡單的崩潰還好說眯娱,復(fù)雜的崩潰就需要我們通過解析Crash文件來分析了礁苗,解析Crash文件在iOS開發(fā)中是比較常見的。

獲取崩潰信息方式

在iOS中獲取崩潰信息的方式有很多徙缴,比較常見的是使用友盟试伙、云測、百度等第三方分析工具于样,或者自己收集崩潰信息并上傳公司服務(wù)器疏叨。

下面列舉一些我們常用的崩潰分析方式:

使用友盟、云測百宇、百度等第三方崩潰統(tǒng)計工具考廉。

自己實現(xiàn)應(yīng)用內(nèi)崩潰收集,并上傳服務(wù)器携御。

Xcode-Devices中直接查看某個設(shè)備的崩潰信息昌粤。

使用蘋果提供的Crash崩潰收集服務(wù)。(少用)

收集崩潰信息

蘋果給我們提供了異常處理的類啄刹,NSException類涮坐。這個類可以創(chuàng)建一個異常對象,也可以通過這個類獲取一個異常對象誓军。

這個類中我們最常用的還是一個獲取崩潰信息的C函數(shù)袱讹,我們可以通過這個函數(shù)在程序發(fā)生異常的時候收集這個異常。

// 將系統(tǒng)提供的獲取崩潰信息函數(shù)寫在這個方法中昵时,以保證在程序開始運行就具有獲取崩潰信息的功能- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions {// 將下面C函數(shù)的函數(shù)地址當(dāng)做參數(shù)NSSetUncaughtExceptionHandler(&UncaughtExceptionHandler);returnYES;? }// 設(shè)置一個C函數(shù)捷雕,用來接收崩潰信息voidUncaughtExceptionHandler(NSException*exception){// 可以通過exception對象獲取一些崩潰信息,我們就是通過這些崩潰信息來進行解析的壹甥,例如下面的symbols數(shù)組就是我們的崩潰堆棧救巷。NSArray*symbols = [exception callStackSymbols];NSString*reason = [exception reason];NSString*name = [exception name];? }

我們也可以通過下面方法獲取崩潰統(tǒng)計的函數(shù)指針:

NSUncaughtExceptionHandler*handler =NSGetUncaughtExceptionHandler();

dSYM 符號集

符號集是我們對ipa文件進行打包之后,和.app文件同級的后綴名為.dSYM的文件句柠,這個文件必須使用Xcode進行打包才有浦译。

每一個.dSYM文件都有一個UUID棒假,和.app文件中的UUID對應(yīng),代表著是一個應(yīng)用精盅。而.dSYM文件中每一條崩潰信息也有一個單獨的UUID帽哑,用來和程序的UUID進行校對。

我們?nèi)绻皇褂?dSYM文件獲取到的崩潰信息都是不準確的叹俏。

符號集中存儲著文件名妻枕、方法名、行號的信息粘驰,是和可執(zhí)行文件的16進制函數(shù)地址對應(yīng)的佳头,通過分析崩潰的.Crash文件可以準確知道具體的崩潰信息。

我們每次Archive一個包之后晴氨,都會隨之生成一個dSYM文件康嘉。每次發(fā)布一個版本,我們都需要備份這個文件籽前,以方便以后的調(diào)試亭珍。進行崩潰信息符號化的時候,必須使用當(dāng)前應(yīng)用打包的電腦所生成的dSYM文件枝哄,其他電腦生成的文件可能會導(dǎo)致分析不準確的問題肄梨。

Archive.png

當(dāng)程序崩潰的時候,我們可以獲得到崩潰的錯誤堆棧挠锥,但是這個錯誤堆棧都是0x開頭的16進制地址江滨,需要我們使用Xcode自帶的symbolicatecrash工具來將.Crash和.dSYM文件進行符號化窖剑,就可以得到詳細崩潰的信息。

崩潰分析

命令行解析Crash文件

通過Mac自帶的命令行工具解析Crash文件需要具備三個文件

symbolicatecrash,Xcode自帶的崩潰分析工具懂牧,使用這個工具可以更精確的定位崩潰所在的位置蝙茶,將0x開頭的地址替換為響應(yīng)的代碼和具體行數(shù)宵呛。

我們打包時產(chǎn)生的dSYM文件茄厘。

崩潰時產(chǎn)生的Crash文件,例如:*.crash。

我在解析崩潰信息的時候稠茂,首先在桌面上建立一個Crash文件夾柠偶,然后將.Crash、.dSYM睬关、symbolicatecrash放在這個文件夾中诱担,這樣進入這個文件夾下,直接一行命令就解決了电爹。

symbolicatecrash我們可以在下面路徑下可以找到蔫仙,我用的是Xcode7,其他版本Xcode路徑不一樣藐不,請自行Google匀哄。

/Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash

選中archive的版本右擊,選擇Show in Finder就可以選中archived 文件然后顯示包內(nèi)容雏蛮,就可以找到dSYM文件了涎嚼。

dsym文件位置.png

將.Crash、.dSYM挑秉、symbolicatecrash三個文件都放在我們在桌面建立的Crash文件夾中法梯。

crash.png

進行解析的工作

開啟命令行工具,進入崩潰文件夾crash中

cd/Users/自己MacPro上的名字/Desktop/崩潰文件夾crash

使用命令解析Crash文件犀概,*號指的是具體的文件名

./symbolicatecrash ./*.crash ./*.app.dSYM > symbol.crash

如果上面命令不成功立哑,使用命令檢查一下環(huán)境變量

xcode-select -print-path

返回結(jié)果:

/Applications/Xcode.app/Contents/Developer/

如果不是上面的結(jié)果,需要使用下面命令設(shè)置一下導(dǎo)出的環(huán)境變量姻灶,然后重復(fù)上面解析的操作铛绰。(這一步很重要)

export DEVELOPER_DIR=/Applications/XCode.app/Contents/Developer

解析完成后會生成一個新的.Crash文件,這個文件中就是崩潰詳細信息产喉。圖中紅色標注的部分就是我們代碼崩潰的部分捂掰。

result.png

注意,以下情況不會有崩潰信息產(chǎn)生:

內(nèi)存訪問錯誤(不是野指針錯誤)

低內(nèi)存曾沈,當(dāng)程序內(nèi)存使用過多會造成系統(tǒng)低內(nèi)存的問題这嚣,系統(tǒng)會將程序內(nèi)存回收

因為某種原因觸發(fā)看門狗機制

通過Xcode查看設(shè)備崩潰信息

除了上面的系統(tǒng)分析工具來進行分析,如果是我們自己直接使用手機連接崩潰或者崩潰之后連接手機塞俱,選擇window-> devices -> 選擇自己的手機 -> view device logs 就可以查看我們的崩潰信息了姐帚。

deviceLog.png

只要手機上的應(yīng)用是這臺電腦安裝打包的,這樣的崩潰信息系統(tǒng)已經(jīng)為我們符號化好了障涯,我們只需要進去之后等一會就行(不要相信這里面的進度刷新罐旗,并不準確),如果還是沒有符號化完畢 唯蝶,我們選擇文件尤莺,然后右擊選擇Re-Sysbomlicate就可以。

如果是使用其他電腦進行的打包生棍,我們可以在這里面將Crash文件導(dǎo)出颤霎,自己通過命令行的方式進行解析。

日記本

? 著作權(quán)歸作者所有

舉報文章

如果覺得我的文章對您有用涂滴,請隨意打賞友酱。您的支持將鼓勵我繼續(xù)創(chuàng)作!

打賞支持

喜歡

17

更多分享6條評論只看作者

按時間正序按時間倒序按喜歡排序EmptyWalker

2樓 · 2016.05.18 08:43

請問博主柔纵,你的crash文件指的是什么文件缔杉,對于友盟統(tǒng)計的錯誤來說,我要怎么獲取crash文件呢搁料?謝謝

回復(fù)

天清水藍@EmptyWalker同問或详,我用的云測統(tǒng)計系羞,云測里面連內(nèi)存地址都沒有。霸琴。椒振。更坑!想知道上線的應(yīng)用.crash文件怎么獲取

2016.08.02 20:10回復(fù)

Somerr態(tài):同問澎迎,從友盟怎么獲取crash文件?

2016.09.10 17:01回復(fù)

添加新評論

rensheng

3樓 · 2016.09.08 17:46

Mark 大神 膜拜啊

回復(fù)

Clemo

4樓 · 2016.11.18 14:26

現(xiàn)在xcode獲取的crash文件好像是自動符號化了的吧?

回復(fù)XVXVXXX

5樓 · 2016.12.06 17:07

symbolicatecrash我們可以在下面路徑下可以找到夹供,我用的是Xcode7仁堪,其他版本Xcode路徑不一樣哮洽,請自行Google。

find /Applications/Xcode.app -name symbolicatecrash -type f

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末弦聂,一起剝皮案震驚了整個濱河市袁铐,隨后出現(xiàn)的幾起案子横浑,更是在濱河造成了極大的恐慌剔桨,老刑警劉巖徙融,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件洒缀,死亡現(xiàn)場離奇詭異,居然都是意外死亡欺冀,警方通過查閱死者的電腦和手機树绩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來饺饭,“玉大人瘫俊,你說我怎么就攤上這事∶?祝” “怎么了?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵赋朦,是天一觀的道長宠哄。 經(jīng)常有香客問我,道長承粤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上尚胞,老公的妹妹穿的比我還像新娘。我一直安慰自己侍咱,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布堪嫂。 她就那樣靜靜地躺著,像睡著了一般恶复。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上翅萤,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天碳蛋,我揣著相機與錄音,去河邊找鬼愕乎。 笑死,一個胖子當(dāng)著我的面吹牛快耿,可吹牛的內(nèi)容都是我干的妥色。 我是一名探鬼主播,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼幢踏,長吁一口氣:“原來是場噩夢啊……” “哼僚匆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起纳击,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤堡赔,失蹤者是張志新(化名)和其女友劉穎灼捂,沒想到半個月后艘包,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體的猛,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡想虎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了舌厨。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖煌恢,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情瑰抵,我是刑警寧澤,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布二汛,位于F島的核電站拨拓,受9級特大地震影響肴颊,放射性物質(zhì)發(fā)生泄漏渣磷。R本人自食惡果不足惜婿着,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一醋界、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧形纺,春花似錦、人聲如沸逐样。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至争便,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間始花,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工酷宵, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人浇垦。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像朴摊,于是被迫代替她去往敵國和親默垄。 傳聞我的和親對象是個殘疾皇子甚纲,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,947評論 2 355

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

  • 我們一生的名字一般不會發(fā)生改變,但每一個名字的每一個年齡階段介杆,在他人眼中卻有不同的含義。 你的名字...
    烽火煤閱讀 205評論 0 0
  • 1.2每個對象都有一個接口 第一個面向?qū)ο笳Z言Simula-67.他在程序中使用基本關(guān)鍵字class來引入新的類型...
    左神話閱讀 320評論 0 0
  • 星下 我荆隘,凝視著你 那是你的淚水嗎? 為何沒有撫摸我的臉頰椰拒? 我,踏著風(fēng)語前行 曾被那荊棘絆倒 曾被那猛獸追咬 我...
    卷哥是流氓閱讀 192評論 0 4