dsym

iOS開發(fā)時經常需要接觸符號表的概念累贤,本文主要分享符號表相關知識,包括什么是符號表矗晃,符號表的作用仑嗅,符號表的產生過程,如何查找符號表文件张症,如何查找符號表文件的uuid仓技。

iOS符號表(dSYM)知識總結

什么是符號表 以及 為什么需要使用符號表

iOS構建時產生的符號表,它是內存地址與函數名俗他,文件名脖捻,行號的映射表。 符號表元素如下所示:

類似于android構建release包時的mapping文件兆衅,我們利用mapping文件可以將混淆后的APP運行時的現成堆棧信息還原成混淆前的堆棧信息(利用retrace 工具)地沮。所以當應用crash時,我們可以利用crash時的堆棧信息得到對應到源代碼的堆棧信息羡亩,還能看到出錯的代碼在多少行摩疑,所以能快速定位出錯的代碼位置,以便快速解決問題畏铆。

而iOS應用crash時也有堆棧雷袋,release版的應用,crash時的堆棧信息辞居,全是二進制的地址信息楷怒。

android至少還能看到函數名字,雖然是混淆的瓦灶,還能看到系統(tǒng)函數的名字鸠删,所以相對來說還好一點)

如果利用這些二進制的地址信息來定位問題是不可能的,因此我們需要將這些二進制的地址信息還原成源代碼種的函數以及行號贼陶,這時候就需要符號表了刃泡。 舉個例子:

而debug版本的應用巧娱,crash時的堆棧信息有時能看到函數名字,但是也看不到對應的源代碼文件的行號捅僵,這樣也沒法定位問題家卖。 debug版本崩潰時的堆棧如下所示:

因此如果我們將產品提供給項目成員體驗時,不管是debug版本還是release版本都需要符號表來幫我們將crash的堆棧信息還原成源代碼文件對應的信息庙楚,以便快速定位問題

如果使用bugly來做crash上報管理上荡,只需要將構建時的符號表上傳到bugly,當應用crash時,bugly會將crash信息上報到bugly馒闷,然后會自動替我們將原始的crash的二進制堆棧信息還原成包含行號的源代碼文件信息酪捡,我們就可以快速定位問題

符號表如何產生

看一下ios項目的歸檔構建流程:

準備構建環(huán)境,構建目錄

編譯主工程依賴的Pods工程的靜態(tài)庫或者Framework (=== BUILD TARGET Aspects OF PROJECT Pods WITH CONFIGURATION Debug ===)

編譯主工程的源代碼文件 (CompileC)

鏈接生成主工程對應的可執(zhí)行文件 (Ld)

拷貝圖片纳账,localized字符串等資源文件 (CpResource)

編譯storyboard文件 (CompileStoryboard)

CompileAssetCatalog

處理pinfo.list文件 (ProcessInfoPlistFile)

生成符號表文件(GenerateDSYMFile)

鏈接StoryBoard(LinkStoryboards)

執(zhí)行配置的腳本文件(PhaseScriptExecution)

打包生成app文件逛薇,不是ipa文件(ProcessProductPackaging)

簽名 (CodeSign)

校驗 (Validate)

像Bugly要求我們在工程配置的Build Phases里添加它的腳本,用于將生成的符號表上傳到bugly疏虫。根據歸檔構建流程永罚,我們知道生成符號表的步驟是在處理pinfo.plst文件之后,所以我們配置的bugly的執(zhí)行腳本必須放在鏈接這個步驟之后卧秘,否則會導致找不到符號表文件呢袱。另外最初生成的符號表并不是在我們看到的歸檔文件內部,而是放在構建的一個臨時目錄中翅敌,最后才拷貝到歸檔目錄下的羞福,最初生成的符號表文件的存放目錄類似于如下:

其實第1步~第11步就是我們?yōu)橹鞴こ讨鱐arget配置的構建步驟,如下所示:

注意:

debug配置默認不會生成符號表

如果想生成符號表蚯涮,可參看:XCode編譯后沒有生成dSYM文件治专?

每次構建時都會產生不同的符號表,這個和android的mapping文件很不一樣遭顶,每個符號表都有一個唯一的uuid张峰,和每次構建對應

通過歸檔構建流程得到的是xarchive歸檔文件,如果要生成ipa文件還必須通過歸檔文件導出ipa文件 命令行歸檔的命令如下

命令行導出ipa文件的命令如下所示:

如何定位dSYM文件

參看如何定位dSYM文件

dSYM文件其實是一個帶后綴的文件夾形式的文件棒旗,內容如下所示:

真實的符號表文件其實是1個二進制文件喘批,bugly提供了腳本將這個二進制文件轉為文本形式的文件,文件的內容其實就是二進制地址對和源代碼文件嗦哆,行號以及函數名字的對應關系

如何查看dSYM文件的uuid

iOS App崩潰時會有此次構建的uuid信息谤祖,如果要將崩潰堆棧還原成對應的源代碼文件信息婿滓,需要根據這個uuid找到對應的符號表的uuid老速,這樣才能正確還原

參看如何查看dSYM文件的uuid

總結下來有2種方式:

通過命令查看

通過bugly腳本導出符號表文件查看uuid

如何找回已發(fā)布到App Store的App對應的dSYM文件?

參看如何找回已發(fā)布到App Store的App對應的dSYM文件

參考資料

iOS符號表

備注

后續(xù)再總結開發(fā)時崩潰的堆棧如何還原凸主,理論上來說應該有兩個步驟:

監(jiān)聽ios app崩潰橘券, 并打印崩潰堆棧信息至文件里

將崩潰堆棧信息還原成源文件對應的信息


原文鏈接:www.cloudchou.com

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子旁舰,更是在濱河造成了極大的恐慌锋华,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件箭窜,死亡現場離奇詭異毯焕,居然都是意外死亡,警方通過查閱死者的電腦和手機磺樱,發(fā)現死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進店門纳猫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人竹捉,你說我怎么就攤上這事芜辕。” “怎么了块差?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵侵续,是天一觀的道長。 經常有香客問我憨闰,道長状蜗,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任起趾,我火速辦了婚禮诗舰,結果婚禮上,老公的妹妹穿的比我還像新娘训裆。我一直安慰自己眶根,他們只是感情好,可當我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布边琉。 她就那樣靜靜地躺著属百,像睡著了一般。 火紅的嫁衣襯著肌膚如雪变姨。 梳的紋絲不亂的頭發(fā)上族扰,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天,我揣著相機與錄音定欧,去河邊找鬼渔呵。 笑死,一個胖子當著我的面吹牛砍鸠,可吹牛的內容都是我干的扩氢。 我是一名探鬼主播,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼爷辱,長吁一口氣:“原來是場噩夢啊……” “哼录豺!你這毒婦竟也來了朦肘?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤双饥,失蹤者是張志新(化名)和其女友劉穎媒抠,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體咏花,經...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡趴生,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了昏翰。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片冲秽。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖矩父,靈堂內的尸體忽然破棺而出锉桑,到底是詐尸還是另有隱情,我是刑警寧澤窍株,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布民轴,位于F島的核電站,受9級特大地震影響球订,放射性物質發(fā)生泄漏后裸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一冒滩、第九天 我趴在偏房一處隱蔽的房頂上張望微驶。 院中可真熱鬧,春花似錦开睡、人聲如沸因苹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽扶檐。三九已至,卻和暖如春胁艰,著一層夾襖步出監(jiān)牢的瞬間款筑,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工腾么, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留奈梳,地道東北人。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓解虱,卻偏偏與公主長得像攘须,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子饭寺,可洞房花燭夜當晚...
    茶點故事閱讀 43,514評論 2 348

推薦閱讀更多精彩內容

  • 什么是dSYM文件阻课? iOS平臺中,dSYM文件是指具有調試信息的目標文件艰匙,文件名通常為:xxx.app.dSYM...
    Crazy2015閱讀 27,405評論 0 9
  • 什么是符號表限煞? 符號表是內存地址與函數名、文件名员凝、行號的映射表署驻。符號表元素如下所示: <起始地址> <結束地址> ...
    深圳陽光閱讀 12,187評論 28 5
  • 什么是符號表? 符號表是內存地址與函數名健霹、文件名旺上、行號的映射表。符號表元素如下所示: <起始地址> <結束地址> ...
    崠崠閱讀 3,860評論 3 1
  • dSYM文件是什么?debugger Symbols 的簡稱.dSYM文件是一個符號表文件, 這里面包含了一個16...
    躍文閱讀 5,926評論 0 2
  • 我們在iOS開發(fā)過程中一定會跟符號表(dSYM文件)打交道糖埋,它是我們不可或缺的定位bug的小幫手宣吱。我們都知道,每次...
    Code_Ninja閱讀 4,552評論 0 9