美文网首页
【iOS】crash 解析

【iOS】crash 解析

作者: Kean_Qi | 来源:发表于2021-11-01 10:13 被阅读0次

近日在使用友盟统计的时候,一个crash的寻找其原始地址经历,做一次记录。


image.png

上图是错误日志的虚拟内存地址,对于如何通过虚拟地址找到对应错误方法,我做如下几条总结:

一、找到xcode自带工具symbolicatecrash

# 查找本地symbolicatecrash
find /Applications/Xcode.app -name symbolicatecrash -type f
# 结果如下
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/iOSSupport/Library/PrivateFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash

二、复制symbolicatecrash工具到自定义文件夹 将应用到xxx.app.dSYM放入该文件夹

xxx.app.dSYM为具有调试信息的目标文件,可以通过dSYM经过解析还原错误的代码位置

三解析过程

# 错误虚拟地址
 0x00000001045038a4 xxxx + 3848356
# 虚拟地址16进制转10 进制
printf %d 0x00000001045038a4
# 结果如下
4367333540
# 虚拟地址与偏移量进行相加
expr  4367333540 + 3848356
# 结果
4371181896
#将计算的十进制结果再转16进制
printf "%X\n" 4371181896
# 结果
1048AF148
# 通过atos [-arch 架构名] [-o 符号表] [-l 模块地址] [方法地址] 命令找到错误方法
xcrun atos -arch arm64 -o ./xxx.app.dSYM/Contents/Resources/DWARF/xxx -l 0x00000001045038a4 1048AF148 
#得到发生错误的方法
+[IFABlurryView screenShot] (in xxx) (IFABlurryView.m:61)
#然后找到对应错误并解决问题

其中atos [-arch 架构名] [-o 符号表] [-l 模块地址] [方法地址] 命令的模块地址是对于错误的虚拟内存地址

.crash文件解析

如果有.crash 文件
解析过程如下:


./symbolicatecrash ./crash.crash ./xxx.app.dSYM > crash_xxx.crash

如果无法解析,执行命令
export DEVELOPER_DIR=/Applications/XCode.app/Contents/Developer

结果如下:
+[IFABlurryView screenShot] (in xxx) (IFABlurryView.m:61)
+[IFABlurryView blurImage] (in xxx) (IFABlurryView.m:49)
-[IFABlurryView init] (in xxx) (IFABlurryView.m:33)
-[IFARootNavigationController resignActive] (in xxx) (IFARootNavigationController.m:79)

相关文章

网友评论

      本文标题:【iOS】crash 解析

      本文链接:https://www.haomeiwen.com/subject/jwhzaltx.html