iOS崩溃日志之手动解析与自动解析

iOS崩溃日志之手动解析与自动解析_第1张图片

前言

在日常开发中难免遇到程序崩溃的时候,若在Dev环境下通过编译器便能很容易定位到崩溃代码处,但是若版本发布在正式环境里(包括Adhoc和distrubute),我们便无法直接定位到崩溃代码处了。此刻app里的统计平台反馈给我们的是一段没有可读性的日志。那么如何高效、快速、准确地解析日志以便我们快速定位到问题代码?

iOS崩溃日志之手动解析与自动解析_第2张图片
talkingData平台上的崩溃日志

一、所需文件

  • 崩溃日志文件
    我们公司使用的是talkingData统计分析平台,故在网站平台可以看到详细的日志记录,平台上还能看到具体是哪一个版本的APP崩溃。从网站平台下载下来的日志文件为csv格式。


  • 符号表文件

  • 依次点击 Xcode-->Window-->Organizer-->Archives,选中你的项目,右击,点击 “Show in Finder” 便可找到对应的xcarchive文件。


    iOS崩溃日志之手动解析与自动解析_第3张图片
  • 选中上面找到的xcarchive文件,右击点击“Show Package Contents”,进入dSYMs便可以看到dSYM文件。


    iOS崩溃日志之手动解析与自动解析_第4张图片

二、解析方式

  • 手动解析

  • 新建文件夹crash,将dSYM文件拷贝至crash文件中,打开"Terminal",cd进入crash目录,输入atos -o YourAPP.app.dSYM/Contents/Resources/DWARF/YourAPP -arch arm64 -l 0x100008000 0x000000010007cf10
    0x100008000 :start adress
    0x000000010007cf10 : Offset address

  • 输出结果:


  • 自动解析
    自动解析其实就是将上述手动解析步骤用脚本来执行,可以看到其结果是一样的。


  • 脚本

自己新建一个.sh文件,将脚本文件拷贝到其中,.sh文件中用#注释语句,因为#Markdown语法中有特殊含义,故.sh文件中需要将//换成#

// 使用须知
// 1.自己新建一个文件夹,将.xcarchive文件和talkingData上的日志文件(.csv格式)下载并保存到该目录
// 2.cd进入该目录, 运行脚本crash.sh, 脚本可带参数, 不传参数时默认是YourAPP, 带参数时,参数表示其它功能名称。例如./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 <

本文系作者原创,转载请注明出处。

你可能感兴趣的:(iOS崩溃日志之手动解析与自动解析)