在实际的开发过程中,我们的app如果出现crash情况,一般会通过bugly或者firebase等工具,上报到控制台,方便我们进行分析。但是有的时候也会存在一些crash信息没有上报,我们开发无法根据测试反馈的流程复现crash的情况。针对这种情况,只能让测试把手机打开一些功能,来方便我们定位问题。具体步骤如下:
共享iphone分析开关打开,这样有crash信息就会记录下来
如果有crash信息就有记录下来,可以点击【分析数据】这一行进去查看,具体如下:
可以选择某一个信息,进入然后分享出来。
接下来就可以进行crash信息的解析处理了。具体步骤如下:
需要准备的文件
1,导出的crash日志文件,后缀名修改为.crash
2, dSYM符号表文件
3,解析符号表的脚本Crash.sh
将这三个文件放在同一个文件夹内,并进入到这个文件夹下,然后在终端执行如下命令
sh Crash.sh aaa.crash bbb.app.dSYM
备注:aaa.crash指自己的crash名字,不要有和这个一样,bbb也是指自己的文件名字,不要求必须一样。
执行后截图如下:
可以看到生成了symbol.text文件。大家就可以进去看crash的详细信息了。注意:解析符号表时,Xcode的版本号一定要和打包时的版本号保持一致,另外这个解析符号表,也存在解析不全的情况,这个大家要有一定的心理预期。如果后续有更好的方法,会持续更新在在本文中。
Crash.sh脚本具体内容如下,大家可以直接复制使用
#!/bin/bash
export DEVELOPER_DIR=/Applications/XCode.app/Contents/Developer
echo "----开始 第一个参数是crash路径 -----"
symbolToolPath="./symbolicatecrash"
crashPath=""
dSYMPath=""
if [ ! -f "$symbolToolPath" ]
then
echo "文件为特殊文件"
symbolToolPath="/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash"
echo "symbolicatecrash工具的路径是为:"$symbolToolPath
if [ -f "$symbolToolPath" ]
then
echo "symbolicatecrash工具存在(文件为普通文件)"
else
echo "无法找到symbolicatecrash工具"
fi
fi
function findFile(){
crashPath=$(find . -name "*.crash")
}
if [ -n "$1" ]
then
crashPath=$1
echo "已传入crash文件路径:$crashPath"
else
findFile
echo "未传入crash文件路径,搜索同级目录下crash文件"
fi
if [ ! -f "$crashPath" ]
then
echo "搜索失败,无法找到crash文件"
exit
fi
dSYMPath=$(find . -name "*.dSYM" -print)
echo "找到的符号表路径:$dSYMPath"
if [ ! -d $dSYMPath ]
then
echo "无法找到符号表dSYM文件"
exit
fi
# ./symbolicatecrash ./*.crash ./*.app.dSYM > symbol.crash
$symbolToolPath $crashPath $dSYMPath > symbol.text