#!/bin/sh
#參數(shù)
symbolToolPath="./symbolicatecrash"
#
show_usage="args: [-c crashPath or ipsPath, -d dSYMPath]"
echo $show_usage
crashPath=""
dSYMPath=""
while getopts ":c:d:" opt
do
case $opt in
c)
crashPath=$OPTARG
;;
d)
dSYMPath=$OPTARG
;;
?)
echo "Invalid option: -$OPTARG index:$OPTIND"
exit 1;;
esac
done
export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer
if [ ! -f "$symbolToolPath" ]
then
echo "當(dāng)前文件件內(nèi)未找到 symbolicatecrash 工具,嘗試使用 Xcode 提供"
symbolToolPath="/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash"
echo "symbolicatecrash工具的路徑是為:"$symbolToolPath
if [ -f "$symbolToolPath" ]
then
echo "symbolicatecrash工具存在(文件為普通文件)"
else
echo "無(wú)法找到symbolicatecrash工具"
fi
fi
# 提取dSYM文件的UUID
dSymUuid=$(dwarfdump --uuid $dSYMPath)
dSymUuid=${dSymUuid:5:37}
dSymUuid=$(echo $dSymUuid|tr [a-z] [A-Z]);
echo "dSYM --uuid $dSymUuid"
crashName=$(echo "${crashPath%.*}");
crashKuoZhan=$(echo "${crashPath#*.}");
if [ -f "$crashPath" ]
then
if [ $crashKuoZhan == "ips" ];then
mv $crashPath "$crashName.crash"
crashPath="$crashName.crash"
fi
fi
function symbolCrashHeader() {
#提取閃退日志頭部信息
text=$(grep -n 'slice_uuid=*' $crashPath)
ipsUuid=${text#*slice_uuid}
ipsUuid=${ipsUuid:3:36}
ipsUuid=$(echo $ipsUuid | tr [a-z] [A-Z]);
echo "crash --uuid $ipsUuid"
if [[ $dSymUuid != $ipsUuid ]]; then
echo 'uuid 不一致,無(wú)法符號(hào)化ips';
exit 1
fi
}
symbolCrashHeader
$symbolToolPath $crashPath $dSYMPath > symbol.crash
使用示例
chmod 777 parse_ips.sh
./parse_ips.sh -c xxx.crash -d xxx.dSYM