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

输入图片说明

前言

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

[talkingData平台上的崩溃日志]

输入图片说明

一、所需文件

1. 崩溃日志文件

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

输入图片说明

2. 符号表文件

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

 2.2 选中上面找到的xcarchive文件,右击点击“Show Package Contents”,进入dSYMs便可以看到dSYM文件。

二、解析方式

1. 手动解析

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

 1.2 0x100008000 :start adress     0x000000010007cf10 : Offset address

 1.3 输出结果:

输入图片说明

2. 自动解析

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

输入图片说明

3. 脚本

自己新建一个.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 <<EOF
$result
EOF
echo '----------------------------crash end function---------------------------------\n'

cd ../
rm -r file

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

转载于:https://my.oschina.net/u/3445809/blog/885617

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值