在平常开发中不免遇到程序崩溃的时候,若在Dev环境下经过编译器便能很容易定位到崩溃代码处,可是若版本发布在正式环境里(包括Adhoc和distrubute),咱们便没法直接定位到崩溃代码处了。此刻app里的统计平台反馈给咱们的是一段没有可读性的日志。那么如何高效、快速、准确地解析日志以便咱们快速定位到问题代码?app
[talkingData平台上的崩溃日志]网站
1. 崩溃日志文件日志
咱们公司使用的是talkingData统计分析平台,故在网站平台能够看到详细的日志记录,平台上还能看到具体是哪个版本的APP崩溃。从网站平台下载下来的日志文件为csv格式。code
2. 符号表文件图片
2.1 依次点击 Xcode-->Window-->Organizer-->Archives,选中你的项目,右击,点击 “Show in Finder” 即可找到对应的xcarchive文件。开发
2.2 选中上面找到的xcarchive文件,右击点击“Show Package Contents”,进入dSYMs即可以看到dSYM文件。编译器
1. 手动解析it
1.1 新建文件夹crash,将dSYM文件拷贝至crash文件中,打开"Terminal",cd进入crash目录,输入atos -o YourAPP
.app.dSYM/Contents/Resources/DWARF/YourAPP
-arch arm64 -l 0x100008000 0x000000010007cf10io
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
本文系做者原创,转载请注明出处。