Xcode工程中關(guān)于Debug Symbols的設(shè)置

Xcode默認的編譯的時候,會生成Debug Symbols信息,這些信息可以使得我們在調(diào)試的時候能夠看到代碼執(zhí)行的類、方法以及變量的信息;對于線上crash,可以通過這些信息定位crash代碼的位置。但是,對于一些需要打包給別人使用的類庫,如果帶有Debug Symbols信息那使用者就可以跟蹤到類庫的源代碼。為了保護代碼,在提供包的時候,我們想要去掉這些信息。

編譯時,蘋果允許我們選擇是否攜帶Debug Symbols信息,可以在工程的Build Settings中進行設(shè)置

一、控制Symbols生成

Code Generation
1、Generate Debug Symbols
  • 控制是否生成調(diào)試符號化信息

  • 對于我們看到的現(xiàn)象是:崩潰時,是否能看到靜態(tài)庫的源碼

2、Debug Information Level
  • 當Generate Debug Symbols為YES時,控制生成的調(diào)試符號化信息的詳細程度

  • 默認值 Compiler default,還有一個選項是 Line tables only,設(shè)置為Line tables only則只生成包含 函數(shù)名、文件名和行號 的信息,不包含變量信息,在崩潰時進入源碼后,調(diào)試器中不顯示變量的信息

二、控制Symbols剝離

Deployment
1、Deployment Postprocessing
  • 控制是否處理剝離邏輯的總開關(guān),這個如果是NO的話,后面的都不起作用
2、Strip Debug Symbols During Copy
  • 控制copy時是否剝離

  • 這里的copy是指,一些資源文件和類庫的copy,如下設(shè)置的類庫會編譯的時候會執(zhí)行copy操作

Copy File

Embedded Binaries

由于copy的時候會,類庫已經(jīng)完成了code sign,此時如果做剝離就會導致簽名失效,所以這項要設(shè)置為NO。參考鏈接:Skipping Copy Phase Strip

3、Strip Linked Product
  • 控制是否剝離

  • 下面是別人總結(jié)的,很好,截屏保存下來了


    a5.png
4、Strip Style
  • 控制剝離哪些信息,有三個可選項:All Symbols(剝離所有)、Non-Global Symbols(保留全局符號)、Debugging Symbols

靜態(tài)庫不能設(shè)置為All Symbols,最多設(shè)置為 Non-Global Symbols

三、控制dSYM文件生成

Build Options
1、Debug Information Format
  • 控制是否生成dSYM文件

  • 選項有 DWARF 和 DWARF with dSYM File,設(shè)置為DWARF with dSYM File則會生成一個dSYM文件

  • 這個設(shè)置項,依賴于Generate Debug Symbols設(shè)置為YES的前提

對于靜態(tài)庫,即使設(shè)為DWARF with dSYM File,也不會生成dSYM文件

四、涉及到的命令行相關(guān)命令
  • nm:查看可執(zhí)行文件或者二進制庫的符號表信息

  • strip:剝離符號表

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容