1. 程式人生 > >iOS崩潰日誌解析指令碼

iOS崩潰日誌解析指令碼

淺談iOS日誌收集系統中介紹瞭如何收集iOS崩潰日誌與如何解析iOS崩潰日誌,主要用到了兩個工具:

  • plcrashutil:將plcrash檔案轉換成蘋果標準崩潰格式
  • symbolicatecrash:符號化崩潰資訊

結合這兩個工具寫了一個指令碼直接將.plcrash格式的檔案符號化解析,並輸出到控制檯與本地檔案。
主要是根據.plcrash檔案中的uuid來匹配出本地預設Archive路徑下對應的dSYM檔案。或者傳入對應奔潰日誌的dSYM檔案直接解析。

對應的shell指令碼如下

#!/bin/bash
if [ $# -lt 1 ] || [ $# -gt 2 ]; then
echo "Warning!!! formate: './lanalyseCrash.sh {crash path} {dSYMs path}" echo "Default Path ~/Library/Developer/Xcode/Archives/*" exit fi ./plcrashutil convert --format=iphone $1 > temp.crash temp="temp.crash" archive="" archiveDir=~/Library/Developer/Xcode/Archives/*/*/dSYMs/* if [ $# -eq 2 ]; then archive=$2
archiveDir="" fi crashFile=`cat temp.crash` log=`sed -n '/JobHunter.*<.*>/p' temp.crash` cutLog=`echo $log | egrep -o "<.*>"` cutLog=`echo ${cutLog%>*}` cutLog=`echo ${cutLog#*<}` uid=`echo $cutLog | tr "[a-z]" "[A-Z]"` uid=`echo ${uid:0:8}-${uid:8:4}-${uid:12:4}-${uid:16:4}-${uid:20:12}
` patten="\.*"${uid}"\.*" for archiveFile in $archiveDir; do result=`dwarfdump --uuid "${archiveFile}"` if [[ $result =~ $patten ]]; then archive=$archiveFile break fi done if [[ -z $archive ]]; then echo "not exist archive file Path!" rm -r temp.crash exit fi # echo $archive export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer logTime=$(date "+%Y%m%d%H%M%S") ./symbolicatecrash temp.crash $archive > ${logTime}.log cat ${logTime}.log rm -r temp.crash

使用方法:

  1. 將上面程式碼拷貝到lanalysecrash.sh檔案中。並給lanalysecrash.sh新增可執行許可權。
  2. plcrashutilsymbolicatecrashlanalysecrash.sh放在同一目錄下。
  3. 進入該目錄下執行以下命令
./lanalysecrash.sh 1501155667.plcrash

./lanalysecrash.sh 1501155667.plcrash Demo.app.dSYM

如果不傳dSYM檔案的路徑那麼預設會從~/Library/Developer/Xcode/Archives/*下查詢對應的dSYM檔案。

執行結束後會在該目錄下生成一個log日誌檔案,同時會在bash控制檯輸出改日誌內容。