脚本处理iOS的Crash日志
背景
当我们打包app时,可以选择生成对应的符号表,其保存 16 进制函数地址映射信息,通过给定的函数起始地址和偏移量,可以对应函数具体信息以供分析。
所以我们拿到测试给的闪退日志(.crash
)时,需要找到打包时对应生成的符号表(.dSYM
)作为钥匙解析。具体分为下面几个步骤
-
dwarfdump --uuid
命令获取.dSYM
的uuid
- 打开
.crash
文件,在特定位置找到uuid
- 根据
arm
版本比对两者是否一致 -
到
Xcode
目录下寻找symbolicatecrash
工具不同版本文件路径不同,具体版本请谷歌。Xcode9路径是/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/
-
设置终端环境变量
export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer"
-
使用
symbolicatecrash
工具解析日志symbolicatecrash .crash .dsym > a.out
虽然过程不复杂,但是每次都需要手动执行一次检查与命令,过于繁琐,所以决定用脚本化提高效率。
___
步骤实现
输入Crash日志
#要求输入crash文件路径
inputFile 'Please Input Crash File' 'crash'
crashPath=$filePath
由于需要输入两种不同后缀的文件路径,且都需要检查,因此统一定义一个方法。
#定义全局变量
filePath=
#输入文件路径
inputFile() {
readSuccess=false
#首先清空变量值
filePath=
while [ $readSuccess = false ]; do
echo $1
#读取到变量中
read -a filePath
if [[ ! -e $filePath || ${filePath##*.} != $2 ]]; then
echo "Input file is not ."$2
else
readSuccess=true
fi
done
}