1>c++ oc都是編譯語言。js是直譯語言锦秒。編譯器CLang +LLvm
2>不管是OC還是Swift,都是采用Clang作為編譯器前端,LLVM(Low level vritual machine)作為編譯器后端歌逢。所以簡單的編譯過程如圖
編譯器前端的任務(wù)是進行:語法分析,語義分析翘狱,生成中間代碼(intermediate representation )秘案。在這個過程中,會進行類型檢查潦匈,如果發(fā)現(xiàn)錯誤或者警告會標注出來在哪一行阱高。
3>編譯器后端:
編譯器后端會進行機器無關(guān)的代碼優(yōu)化,生成機器語言茬缩,并且進行機器相關(guān)的代碼優(yōu)化赤惊。iOS的編譯過程,后端的處理如下
LVVM優(yōu)化器會進行BitCode的生成寒屯,鏈接期優(yōu)化等等
LVM機器碼生成器會針對不同的架構(gòu)荐捻,比如arm64等生成不同的機器碼
<二>執(zhí)行一次XCode build的流程
<三>IPA包的內(nèi)容
例如,我們通過iTunes Store下載微信寡夹,然后獲得ipa安裝包处面,然后實際看看其安裝包的內(nèi)容。
右鍵ipa菩掏,重命名為.zip
雙擊zip文件魂角,解壓縮后會得到一個文件夾。所以智绸,ipa包就是一個普通的壓縮包野揪。
右鍵圖中的WeChat访忿,選擇顯示包內(nèi)容,然后就能夠看到實際的ipa包內(nèi)容了斯稳。
<四>二進制文件的內(nèi)容
通過XCode的Link Map File海铆,我們可以窺探二進制文件中布局。在XCode -> Build Settings -> 搜索map -> 開啟Write Link Map File? 開啟后挣惰,在編譯卧斟,我們可以在對應(yīng)的Debug/Release目錄下看到對應(yīng)的link map的text文件。默認的目錄在
~/Library/Developer/Xcode/DerivedData/-對應(yīng)ID/Build/Intermediates/
<五>dSYM文件
我們每次Archive一個包之后憎茂,都會隨之生成一個dSYM文件珍语。每次發(fā)布一個版本,我們都需要備份這個文件竖幔,以方便以后的調(diào)試板乙。進行崩潰信息符號化的時候,必須使用當前應(yīng)用打包的電腦所生成的dSYM文件拳氢,其他電腦生成的文件可能會導(dǎo)致分析不準確的問題募逞。
參考:http://blog.csdn.net/hello_hwc/article/details/50036323
第一部分:看看UUID;
第二部分:使用命令查看dsym文件的uuid ? Dsym調(diào)試 huangwenchen$ dwarfdump --uuid uau1.3.0.app.dSYM/
第三部分:看到log 定位到代碼片段饿幅。