iOS崩潰日志之手動(dòng)解析與自動(dòng)解析

前言

在日常開發(fā)中難免遇到程序崩潰的時(shí)候,若在Dev環(huán)境下通過編譯器便能很容易定位到崩潰代碼處,但是若版本發(fā)布在正式環(huán)境里(包括Adhoc和distrubute),我們便無法直接定位到崩潰代碼處了。此刻app里的統(tǒng)計(jì)平臺(tái)反饋給我們的是一段沒有可讀性的日志。那么如何高效、快速、準(zhǔn)確地解析日志以便我們快速定位到問題代碼?

talkingData平臺(tái)上的崩潰日志

一、所需文件

  • 崩潰日志文件
    我們公司使用的是talkingData統(tǒng)計(jì)分析平臺(tái),故在網(wǎng)站平臺(tái)可以看到詳細(xì)的日志記錄,平臺(tái)上還能看到具體是哪一個(gè)版本的APP崩潰。從網(wǎng)站平臺(tái)下載下來的日志文件為csv格式。


  • 符號(hào)表文件

  • 依次點(diǎn)擊 Xcode-->Window-->Organizer-->Archives,選中你的項(xiàng)目,右擊,點(diǎn)擊 “Show in Finder” 便可找到對(duì)應(yīng)的xcarchive文件。


  • 選中上面找到的xcarchive文件,右擊點(diǎn)擊“Show Package Contents”,進(jìn)入dSYMs便可以看到dSYM文件。


二、解析方式

  • 手動(dòng)解析

  • 新建文件夾crash,將dSYM文件拷貝至crash文件中,打開"Terminal",cd進(jìn)入crash目錄,輸入atos -o YourAPP.app.dSYM/Contents/Resources/DWARF/YourAPP -arch arm64 -l 0x100008000 0x000000010007cf10
    0x100008000 :start adress
    0x000000010007cf10 : Offset address

  • 輸出結(jié)果:


  • 自動(dòng)解析
    自動(dòng)解析其實(shí)就是將上述手動(dòng)解析步驟用腳本來執(zhí)行,可以看到其結(jié)果是一樣的。


  • 腳本

自己新建一個(gè).sh文件,將腳本文件拷貝到其中,.sh文件中用#注釋語句,因?yàn)?strong>#在Markdown語法中有特殊含義,故.sh文件中需要將//換成#。

// 使用須知
// 1.自己新建一個(gè)文件夾,將.xcarchive文件和talkingData上的日志文件(.csv格式)下載并保存到該目錄
// 2.cd進(jìn)入該目錄, 運(yùn)行腳本crash.sh, 腳本可帶參數(shù), 不傳參數(shù)時(shí)默認(rèn)是YourAPP, 帶參數(shù)時(shí),參數(shù)表示其它功能名稱。例如./crash.sh hrloo

if [ ! -n "$1" ] ;then
xcarchiveName="YourAPP" 
else
xcarchiveName="$1"
fi
dirs=$(pwd)

//-----------------------------------------------//
mkdir -p file $dirs/file

cd $dirs
cp -r ./*.xcarchive $xcarchiveName.xcarchive

cd $dirs/"$xcarchiveName".xcarchive/dSYMs
cp -r ./$xcarchiveName.app.dSYM $dirs/file

cd $dirs

cp -r ./*.csv ./file/""$xcarchiveName"log".txt
rm -r ./"$xcarchiveName".xcarchive

//-------------------deal txt-------------------//

cd file
grep -e "reason" "$xcarchiveName"log.txt
adress=`grep -e "Start Address" "$xcarchiveName"log.txt`
for adr in $adress
do
{
if [[ $adr =~ '0x' ]];
then
adress=$adr
fi
}
done

echo '---------------------------crash begin function-------------------------------\n'
result=`grep -e "$xcarchiveName +" "$xcarchiveName"log.txt`
while read line
do
{
for var in $line
do
if [[ $var =~ '0x' ]];
then
atos -o $xcarchiveName.app.dSYM/Contents/Resources/DWARF/$xcarchiveName -arch arm64 -l $adress $var
fi
done
}
done <<EOF
$result
EOF
echo '----------------------------crash end function---------------------------------\n'

cd ../
rm -r file

本文系作者原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 崩潰是讓發(fā)人員比較頭痛的事情,app崩潰了,說明代碼寫的有問題,這時(shí)如何快速定位到崩潰的地方很重要。調(diào)試階段...
    進(jìn)無盡閱讀 2,186評(píng)論 0 9
  • 前言 iOS崩潰是讓iOS開發(fā)人員比較頭痛的事情,app崩潰了,說明代碼寫的有問題,這時(shí)如何快速定位到崩潰的地方很...
    齊滇大圣閱讀 65,931評(píng)論 29 443
  • iOS 開發(fā)過程中會(huì)遇到crash,有些很容易就能定位到,例如數(shù)組越界、類型不匹配、方法不存在等。但是有些就比較頭...
    LoveY34閱讀 8,958評(píng)論 1 4
  • 如果大家是用真機(jī)在調(diào)試的過程中出現(xiàn)了Crash,那么請(qǐng)看iOS調(diào)試之 crash log分析 前言 導(dǎo)讀:Unde...
    KODIE閱讀 6,619評(píng)論 7 12
  • 在ios崩潰日志中根據(jù)網(wǎng)上亂載的blog跳進(jìn)的各種坑入坑1.xcode導(dǎo)出來的crash 里的Incident I...
    Duanlifeng閱讀 690評(píng)論 0 0

友情鏈接更多精彩內(nèi)容