iOS崩潰日誌解析指令碼
阿新 • • 發佈:2019-01-30
在淺談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
使用方法:
- 將上面程式碼拷貝到
lanalysecrash.sh
檔案中。並給lanalysecrash.sh
新增可執行許可權。 - 將
plcrashutil
,symbolicatecrash
與lanalysecrash.sh
放在同一目錄下。 - 進入該目錄下執行以下命令
./lanalysecrash.sh 1501155667.plcrash
或
./lanalysecrash.sh 1501155667.plcrash Demo.app.dSYM
如果不傳dSYM
檔案的路徑那麼預設會從~/Library/Developer/Xcode/Archives/*
下查詢對應的dSYM
檔案。
執行結束後會在該目錄下生成一個log日誌檔案,同時會在bash
控制檯輸出改日誌內容。