dwarfdump解析線上崩潰日誌dSYM文件

一、dSYM文件:iOS構建時產生的符號表,它是內存地址與函數名,文件名,行號的映射表;iOS應用crash時也有堆棧,release版的應用,crash時的堆棧信息,全是二進制的地址信息;iOS平臺中,dSYM文件是保存符號表的目標文件,文件名一般爲:xxx.dSYM(符號表dSYM概念和得到途徑資料地址https://developer.umeng.com/docs/66632/detail/71519html

二、線上崩潰時採用的dSYM文件: 在xcode7之前 xcode7默認BitCode是關閉的;xcode7之後BitCode默認是開啓的;當開啓BitCode後,在構建二進制版本ipa文件上傳到App Store時,App Store會再次編譯上傳的二進制版本ipa包,所以,在解析線上崩潰日誌時,採用蘋果開發者中心上的dSYM文件;當沒有開啓BitCode時,可使用本地的xx.app.dSYM的dSYM文件;git

 

1、當BitCode沒開啓時,解析線上崩潰日誌方法以下:github

使用工具dSYMTools(下載地址:https://github.com/answer-huang/dSYMTools),下載完,運行dSYMTools(注意是一個macos應用),將對應版本的xcarchive文件或則xx.app.dSYM文件拖拽到dSYMTools控制面板就能夠了,將崩潰的內存地址輸入進去點擊分析就會自動分析出可能出錯的地方(效果以下);macos

 

2、當BitCode開啓了時,解析線上崩潰日誌方法以下:數組

umeng崩潰日誌解析方法:xcode

兩種方式:app

一、利用錯誤解析工具umcrashtool 可是該工具不能調試Application received signal SIGSEGV (null)或者數組越界一類的崩潰函數

二、利用命令dwarfdump(能夠調試數組越界等一類問題)工具

dwarfdump --arch=arm64 --lookup=[崩潰日誌上項目對應的某崩潰地址] [dSYM文件的絕對路徑]ui

 

解析步驟以下:

 

當使用umcrashtool工具解析時,步驟以下:

首先將從開發者中心下載下來dSYM文件移動到 ~/Library/Developer/Xcode/. 目錄下(經過前往進到對應目錄)

 

一、下載 umcrashtool ,以及友盟裏對應崩潰日誌 xxx.csv,放於同一目錄下(結構目錄以下)。

二、打開終端,cd到該目錄下,執行命令:

./umcrashtool [xxx.csv的絕對路徑]

三、若可以分析出來,則終端會打印出代碼崩潰點以及行數,而且生成一個錯誤分析xxx-symbol.csv文件在該目錄下

 

當使用命令dwarfdump時,步驟以下:

一、將下載下來的dSYM放到一個目錄下(以下):

 

二、打開終端,cd到該目錄下,執行命令:

dwarfdump --arch=arm64 --lookup=[崩潰日誌上項目對應的某崩潰地址] [dSYM文件的絕對路徑]   (機型爲64位的)

dwarfdump --arch=armv7 --lookup=[崩潰日誌上項目對應的某崩潰地址] [dSYM文件的絕對路徑]   (機型爲32位的)

dwarfdump --arch=arm7s --lookup=[崩潰日誌上項目對應的某崩潰內存地址] [dSYM文件的絕對路徑]   (機型爲32位的)

三、若可以定位崩潰點,終端則會顯示出崩潰的文件名以及行數

 

下面是查看dSYM文件的UUID的方法:

1.查看 xx.app 文件的 UUID,terminal 中輸入命令 :

dwarfdump --uuid xx.app/xx (xx表明你的項目名)

2.查看 xx.app.dSYM 文件的 UUID ,在 terminal 中輸入命令:

dwarfdump --uuid xx.app.dSYM

下面是崩潰內存地址位置:

 

 

另其餘關於線上崩潰處理的方案以下:

沒有dSYM文件的:

https://www.cnblogs.com/tianshifu/p/6142937.html

https://www.cnblogs.com/ciml/p/7422872.html

http://www.cocoachina.com/industry/20130725/6677.html

相關文章
相關標籤/搜索