這篇文章浙芙,我不說最基本的怎么看crash的棧,怎么定位crash的thread籽腕,希望看這篇文章的童鞋都有這個基礎(chǔ)嗡呼。這篇文章我主要想記錄一下,上傳到Fabric或Bugly或者從手機里拷貝出來的crash log皇耗,只有地址南窗,沒有項目函數(shù)該怎么看。如下圖:
看到這樣的crash log郎楼,是不是一臉懵逼万伤,只能猜出大概就是FMDB里出問題了,但是具體哪里出問題呜袁,出了啥問題敌买,都不知道,沒定位阶界。
之所以出現(xiàn)這樣的問題是因為沒有符號化虹钮,符號化就是將系統(tǒng)的內(nèi)存地址與項目的函數(shù)名、文件名膘融、行號進行映射芙粱,快速并準確地定位用戶APP發(fā)生Crash的代碼位置,簡單的說就是對APP發(fā)生Crash的程序堆棧進行解析和還原氧映。一般在哪臺機器打包的春畔,就去哪臺機器看crash log,Xcode會自動幫你解析屯耸,如果想了解更多,請參考文章 分析iOS Crash文件:符號化iOS Crash文件的3種方法蹭劈。
符號化需要三個文件:
- crash報告(.crash文件)
- 符號文件 (.dsymb文件)
- 應(yīng)用程序文件 (appName.app文件疗绣,把IPA文件后綴改為zip,然后解壓铺韧,Payload目錄下的appName.app文件), 這里的appName是你的應(yīng)用程序的名稱多矮。
項目集成第三方上傳crash log(如Fabric /Bugly/友盟),一般都會要求你上傳對應(yīng)的符號化文件,它會自動幫你符號化crash log塔逃。
定位.dsymb文件
- 方式一
通過打包方式獲取讯壶,
Xcode -> Window -> Organizer -> Show xcarchive file in Finder -> Right Click Your xcarchive file -> Select "Show Package Contents"
附上詳細動畫教程
如果進去還是沒有.dsymb文件,請進入Project Build Settings -> Generate Debug Symbols 確保它的值是Yes
-
方式二
如果不想通過打包方式拿到.dsymb文件湾盗,則直接定位Build后的.app文件伏蚊,在該目錄下面可以找到.dsymb文件,
如果沒有格粪,請進入Project Build Settings > Build Options > Debug Information Format 確保它的值是DWARF with dSYM file躏吊,這樣你在Products目錄下,定位.app文件的目錄下就有.dsymb文件了帐萎。
得到.dsymb文件就可以進行符號化了比伏,不管是instrument還是第三方的,都可以使用疆导。
但是有點特別需要說明赁项,如果你的IPA包是支持bitcode的,那即便你上傳了符號化文件澈段,也是解析不了的悠菜,只會顯示__hidden(排除上架了App Store,從iTunes下載.dsymb)均蜜,如何解決李剖?
用dsymutil命令:
在.dSYMs文件夾同目錄下找到BCSymbolMaps文件夾(file.xcarchive/BCSymbolMaps)再用下面命令,就可以啦囤耳。
dsymutil --symbol-map PATH_TO_BCSYMBOLMAPS_DIR downloaded.dSYM
有多個的話篙顺,循環(huán):
for d in dSYMs/*
dsymutil --symbol-map path/to/file.xcarchive/BCSymbolMaps $d
end
參考文章:
分析iOS Crash文件:符號化iOS Crash文件的3種方法
crash log調(diào)用棧看不到的解決方案(debug symbols不起作用)
Bugly iOS 符號表配置
Xcode - There are no dSYMs available for download
Swift bitcode Crashlytics __hidden