這篇文章會(huì)介紹定位閃退的幾種方法谤祖,由易到難進(jìn)行介紹。當(dāng)你手里關(guān)于閃退的信息越多甜孤,解決就越簡(jiǎn)單协饲,反之畏腕,就會(huì)更難。
首先解釋下符號(hào)化的概念:符號(hào)化就是解決把椳猿恚回溯地址轉(zhuǎn)化為為源碼方法名或函數(shù)名的過(guò)程描馅。符號(hào)化完成后,崩潰日志中所有的十六進(jìn)制地址都轉(zhuǎn)化為了方法名函數(shù)名而线,方便開(kāi)發(fā)人員定位bug.
1铭污、在第三方平臺(tái)或者自研apm平臺(tái)獲取符號(hào)化后的日志
前提:
項(xiàng)目集成的三方收集日志的平臺(tái),或者有自研的apm平臺(tái)膀篮;
打包同學(xué)在該平臺(tái)上傳了dysm文件嘹狞。
這種方法是最簡(jiǎn)單的,也不用過(guò)多介紹誓竿。很多項(xiàng)目都集成了bugly磅网、友盟等等,大公司都會(huì)有自己的一套APM平臺(tái)烤黍。
2知市、利用Xcode查看崩潰信息
前提:
開(kāi)發(fā)者手里有發(fā)生崩潰的手機(jī)傻盟;
手機(jī)上的應(yīng)用是這臺(tái)電腦安裝打包速蕊。
選擇window-> devices -> 選擇自己的手機(jī) -> view device logs 就可以查看手機(jī)上所有的崩潰信息了。如果是使用其他電腦進(jìn)行的打包娘赴,可以在這里面將Crash文件導(dǎo)出规哲,自己通過(guò)命令行的方式進(jìn)行解析(見(jiàn)方法3)。
3诽表、Mac自帶的命令行工具symbolicatecrash
前提:
symbolicatecrash工具;
.ips文件;
dSYM文件;
1唉锌、如何獲取symbolicatecrash工具?
右鍵Xcode,顯示包內(nèi)容竿奏,通過(guò)以下路徑找到:/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash.
2袄简、如何獲取.ips文件
- 可以通過(guò)真機(jī)連Xcode 導(dǎo)出:Xcode>Window>Devices and Simulators>選擇已連接的真機(jī)>View Device Logs>xxxApp>右鍵導(dǎo)出.crash文件;
- 手機(jī)->設(shè)置->隱私->分析與改進(jìn)->分析數(shù)據(jù)泛啸,找到對(duì)應(yīng)時(shí)間點(diǎn)的日志绿语;
3、如何獲取dysm文件?
找到打包的那臺(tái)機(jī)器候址,打開(kāi)Xcode.Window -> Organizer -> Archives -> 選中需要導(dǎo)出dSYM的Archive右擊 -> Show in Finder -> 右鍵.xcarchive文件顯示包內(nèi)容 -> dSYMs文件夾
大公司的打包平臺(tái)下載app的地方吕粹,就有對(duì)應(yīng)的dysm文件。
拿到以上岗仑,三個(gè)文件后匹耕,放到一個(gè)統(tǒng)一文件夾里。命令行cd 到該文件下荠雕,執(zhí)行以下命令:
./symbolicatecrash xxxxx.ips xxxxx.app.dSYM > crash.log
此時(shí)該目錄下稳其,就會(huì)多出一個(gè)crash.log的文件驶赏,里面放的就是符號(hào)化后的解析日志。
如果報(bào)錯(cuò) Error: "DEVELOPER_DIR" is not defined at ./symbolicatecrash line 69. 需要 執(zhí)行命令
export DEVELOPER_DIR="/Applications/XCode.app/Contents/Developer"
然后重新 輸入命令
./symbolicatecrash xxxxx.ips xxxxx.app.dSYM > crash.log
4既鞠、通過(guò)atos逐行解析堆棧
根據(jù)對(duì)應(yīng)的Binary Images 是項(xiàng)目自己的二進(jìn)制還是系統(tǒng)動(dòng)態(tài)庫(kù)來(lái)區(qū)分
1母市、是項(xiàng)目里的二進(jìn)制
直接執(zhí)行命令:
atos -arch arm64 -o 二進(jìn)制名(圖中的2) -l 首地址(后面對(duì)應(yīng)的短的那個(gè)) 偏移地址(后面對(duì)應(yīng)長(zhǎng)的那個(gè))
2、是系統(tǒng)的動(dòng)態(tài)庫(kù)
這個(gè)時(shí)候要根據(jù)日志中的iOS版本信息(圖中的1) 去符號(hào)表目錄下載對(duì)應(yīng)版本的符號(hào)信息损趋。
下載好對(duì)應(yīng)版本的符號(hào)信息患久,把日志里對(duì)應(yīng)的動(dòng)態(tài)庫(kù)(圖片中的3)拷到一個(gè)單獨(dú)文件內(nèi),命令行cd到對(duì)應(yīng)文件夾浑槽,執(zhí)行命令:
atos -arch arm64 Foundation.framework/Foundation -l 0x1830bc000 0x0000000183109f94