背景
线上Crash,无法全局打断点。
- APP集成有友盟统计,后台拿到崩溃日志可进行bug定位
- 通用性:该方法不局限于友盟统计,适用于大多数第三方SDK收集的崩溃日志
错误摘要:
Application threw exception NSInternalInconsistencyException: Tried to pop to a view controller that doesn't exist.
Originated at or in a subcall of __40-[YQNewPublishController publishRequest]_block_invoke
6 AppName 0x000000010100eef4 0x100fc0000 + 323316
从崩溃日志最后一行可以看到:
- 起始地址:
0x100fc0000
- 偏移后地址:
0x000000010100eef4
仅需两步:
1、打开Xcode,上方菜单栏可以看到Window->Organizer->Archives
,找到对应版本,右键点击Show In Finder
,可以看到对应的.xcarchive
文件,然后右键点击显示包内容,可以看到dYSMs文件夹,拷贝里面的.dYSM
文件,存放到新建crash目录下。
2、打开终端Terminal,cd到新建的crash目录下,输入:
atos -o AppName.app.dSYM/Contents/Resources/DWARF/AppName -arch arm64 -l 0x100fc0000 0x000000010100eef4
- 注意修改
其中AppName是咱们的应用名。
,展开.app.dSYM
包内容,找到最后一级路径拖到atos -o
后面即可
打印结果
-[YQDataTeamScoreController requestData] (in ) (YQDataTeamScoreController.m:127)
- 结果显示crash出现在
YQDataTeamScoreController.m
的第127行
第二种 新建.sh脚本文件,自动解析crash
自己新建一个.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
网友评论