1、dSYM文件:iOS构建时产生的符号表,它是内存地址与函数名,文件名,行号的映射表;iOS应用crash时也有堆栈,release版的应用,crash时的堆栈信息,全是二进制的地址信息;iOS平台中,dSYM文件是保存符号表的目标文件,文件名通常为:xxx.dSYM(符号表dSYM概念和获得途径资料地址https://developer.umeng.com/docs/66632/detail/71519)
2、线上崩溃时采用的dSYM文件: 在xcode7以前 xcode7默认BitCode是关闭的;xcode7以后BitCode默认是开启的;当开启BitCode后,在构建二进制版本ipa文件上传到App Store时,App Store会再次编译上传的二进制版本ipa包,因此,在解析线上崩溃日志时,采用苹果开发者中心上的dSYM文件;当没有开启BitCode时,可以使用本地的xx.app.dSYM的dSYM文件;
一、当BitCode没开启时,解析线上崩溃日志方法如下:
使用工具dSYMTools(下载地址:https://github.com/answer-huang/dSYMTools),下载完,运行dSYMTools(注意是一个macos应用),将对应版本的xcarchive文件或则xx.app.dSYM文件拖拽到dSYMTools控制面板就可以了,将崩溃的内存地址输入进去点击分析就会自动分析出可能出错的地方(效果如下);
二、当BitCode开启了时,解析线上崩溃日志方法如下:
umeng崩溃日志解析方法:
两种方式:
1、利用错误解析工具umcrashtool 但是该工具不能调试Application received signal SIGSEGV (null)或者数组越界一类的崩溃
2、利用命令dwarfdump(可以调试数组越界等一类问题)
dwarfdump --arch=arm64 --lookup=[崩溃日志上项目对应的某崩溃地址] [dSYM文件的绝对路径]
解析步骤如下:
当使用umcrashtool工具解析时,步骤如下:
首先将从开发者中心下载下来dSYM文件移动到 ~/Library/Developer/Xcode/. 目录下(通过前往进到对应目录)
1、下载 umcrashtool ,以及友盟里对应崩溃日志 xxx.csv,放于同一目录下(结构目录如下)。
2、打开终端,cd到该目录下,执行命令:
./umcrashtool [xxx.csv的绝对路径]
3、若能够分析出来,则终端会打印出代码崩溃点以及行数,并且生成一个错误分析xxx-symbol.csv文件在该目录下
当使用命令dwarfdump时,步骤如下:
1、将下载下来的dSYM放到一个目录下(如下):
2、打开终端,cd到该目录下,执行命令:
dwarfdump --arch=arm64 --lookup=[崩溃日志上项目对应的某崩溃地址] [dSYM文件的绝对路径] (机型为64位的)
或
dwarfdump --arch=armv7 --lookup=[崩溃日志上项目对应的某崩溃地址] [dSYM文件的绝对路径] (机型为32位的)
或
dwarfdump --arch=arm7s --lookup=[崩溃日志上项目对应的某崩溃内存地址] [dSYM文件的绝对路径] (机型为32位的)
3、若能够定位崩溃点,终端则会显示出崩溃的文件名以及行数
下面是查看dSYM文件的UUID的方法:
1.查看 xx.app 文件的 UUID,terminal 中输入命令 :
dwarfdump --uuid xx.app/xx (xx代表你的项目名)
2.查看 xx.app.dSYM 文件的 UUID ,在 terminal 中输入命令:
dwarfdump --uuid xx.app.dSYM
下面是崩溃内存地址位置:
另其他关于线上崩溃处理的方案如下:
没有dSYM文件的:
https://www.cnblogs.com/tianshifu/p/6142937.html
https://www.cnblogs.com/ciml/p/7422872.html
http://www.cocoachina.com/industry/20130725/6677.html
来源:oschina
链接:https://my.oschina.net/u/2682077/blog/1932159