iOS版友盟错误Application received signal SIGSEGV
找出野指针对象定位
友盟相关日志
错误信息:
Application received signal SIGSEGV
错误详情:
错误分析:
SIGSEGV和SIGBUS一般是由于访问已被释放的内存或者调用不存在的方法所致。
错误定位:
vBell -- 应用名称
0x100475b80 -- 崩溃时的调用方法的16进制函数地址
_ZNK6andjoy7RefBase9incStrongEPKv + 28 -- 文件的地址以及方法所在的行的位置
找出xcode 打的包路径
接下来就是本文的重点,将这条“密文”解析成“明文”了。
首先,要找到该项目发布时Archive编译出来的.xcarchive文件。这个文件包含了.DSYM文件,可以通过XCode->菜单栏中的Window->Organizer,打开Archives列表,找到对应的文件,点击右键Show in Finder。
打开该文件,选中该文件,点击右键 -> 显示包内容。
说明:正常的话(该版本只Archive一次的话),包里面dSYMs文件夹里只有一个以项目名称命名的.app.dSYM文件(如上图中的XingYunGlobalMeeting.app.dSYM文件)。如果同一版本重新Archive(即多次Archive)的话,会有多个.dSYM文件,此时我们就要根据友盟错误分析错误详情里的倒数第五行的dSYM UUID确定对应的.dSYM文件。
然后就要通过这个文件定位错误信息了,共有三种方法:
只介绍方法一(使用电脑原生终端, 而且方法通用)
方法一:使用xcrun atos命令
【说明:最靠谱!推荐使用该方法,特别是该项目的该版本重复Archive的话(即上一步骤有多个.dSYM文件)的话,其他两种方法可能不能使用】
1、选中上一步骤确定的对应.dSYM文件,点击右键显示包文件,按照路径->Contents->Resources->DWARF,找到以项目名命名的文件。
2、打开终端Terminal,输入 atos -o ,然后把上一步中定位的文件拖入终端,补入文件路径,空格,输入友盟错误详情中单条错误信息里的16进制函数地址(如:0x100037da4)
完整命令:
sunlindeMac-mini:~ sunlin$ atos -o /Users/sunlin/Library/Developer/Xcode/Archives/2017-06-12/vBell\ 2017-6-12\ 上午11.45.xcarchive/dSYMs/vBell.app.dSYM/Contents/Resources/DWARF/vBell 0x100475b80
3、终端返回我们看得懂得的“明文”错误信息:
__41-[MSSBrowseCollectionViewCell createCell]_block_invoke (in XingYunGlobalMeeting) (MSSBrowseCollectionViewCell.m:37)
发生崩溃的方法:andjoy:
崩溃所在源码文件::RefBase::incStrong(void const*) const (in vBell)
发生崩溃的方法在源文件中的行号: 28