错误信息:
Application received signal SIGSEGV
错误详情:
错误分析:
SIGSEGV和SIGBUS一般是由于访问已被释放的内存或者调用不存在的方法所致。
错误定位:
XingYunGlobalMeeting -- 应用名称
0x10020d274 -- 崩溃时的调用方法的16进制函数地址
XingYunGlobalMeeting + 2151028 -- 文件的地址以及方法所在的行的位置
接下来就是本文的重点,将这条“密文”解析成“明文”了。
首先,要找到该项目发布时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)
完整命令:
XingYundeMac-mini:~ xingyun$ atos -o /Users/xingyun/Library/Developer/Xcode/Archives/2017-03-20/XingYunGlobalMeeting\ 2017-3-20\ 下午7.20.xcarchive/dSYMs/D29F668F-D4A2-353E-97DC-CD9BFC78695E.dSYM/Contents/Resources/DWARF/XingYunGlobalMeeting 0x100037da4
3、终端返回我们看得懂得的“明文”错误信息:
__41-[MSSBrowseCollectionViewCell createCell]_block_invoke (in XingYunGlobalMeeting) (MSSBrowseCollectionViewCell.m:37)
发生崩溃的方法:-[MSSBrowseCollectionViewCell createCell]_block_invoke
崩溃所在源码文件:MSSBrowseCollectionViewCell.m
发生崩溃的方法在源文件中的行号:37
方法二:使用dwarfdump命令
1、可先将.app.dSYM文件拷贝到一目录下备用,如和崩溃日志放在一个目录下。
2、打开终端,cd到该目录下,执行命令:
$ dwarfdump --arch=arm64 --lookup=[崩溃日志上项目对应的某崩溃地址] [dSYM文件的绝对路径]
方法三:可视化工具dSYMTools
下载链接(源码):https://github.com/answer-huang/dSYMTools
下载后在Xcode中运行,然后按照以下使用步骤进行:
1、将打包发布软件时的xcarchive文件拖入软件窗口内的任意位置(支持多个文件同时拖入,注意:文件名不要包含空格)
2、选中任意一个版本的xcarchive文件,右边会列出该xcarchive文件支持的CPU类型,选中错误对应的CPU类型。
3、对比错误给出的UUID和工具界面中给出的UUID是否一致。
4、将错误地址以及 Slide Address 输入工具的文本框中,点击分析。
方法四:友盟错误分析工具
1、下载错误分析工具
,并解压zip得到umcrashtool文件,可将umcrashtool与已下载的xxx.csv文件放入同一目录下。
2、第二步 在terminal中运行umcrashtool命令,参数为错误分析的.csv文件绝对路径,如下:sanzhang$ ./umcrashtool [absolutely_path_of_csv_file] 将umcrashtool与错误分析.csv文件放入同一目录下
3、在terminal中运行umcrashtool,提示如下: Usage: umcrashtool [export-file-path],定位后的代码及行数会写入错误分析-symbol.csv文件,与原文件在同一目录下。用工具打开新生成的xxx-symbol.csv文件,便可查看错误发生的源码文件及行数。
注:如果错误分析没有成功,请先确保对应的 xxx.dSYM 文件在 ~/Library/Developer/Xcode/ 或该路径的子目录下。(对于每一个产品发布时archive操作会将dsym文件存放到~/Library/Developer/Xcode/Archives路径下,因此建议保留该路径下的文件,以便后续用工具分析错误。)