您的位置:首页 > 其它

dSYM 文件分析工具

2016-08-22 09:53 393 查看
来到新公司后,前段时间就一直在忙,前不久项目终于成功发布上线了,最近就在给项目做优化,并排除一些线上软件的bug,因为项目中使用了友盟统计,所以在友盟给出的错误信息统计中能比较方便的找出客户端异常的信息,可是很多像数组越界却只给出了
***-
[__NSArrayMobjectAtIndex:]:index7beyondbounds[0..6]
'
这类错误信息,如下图所示:



遇到这种问题如果通过
objectAtIndex
去检索错误的地方那将会是一个巨大的工作量。

dSYM文件

什么是dSYM文件

Xcode编译项目后,我们会看到一个同名的dSYM文件,dSYM是保存16进制函数地址映射信息的中转文件,我们调试的symbols都会包含在这个文件中,并且每次编译项目的时候都会生成一个新的dSYM文件,位于
/Users/<用户名>/Library/Developer/Xcode/Archives
目录下,对于每一个发布版本我们都很有必要保存对应的Archives文件(AUTOMATICALLYSAVETHEDSYMFILES这篇文章介绍了通过脚本每次编译后都自动保存dSYM文件)。

dSYM文件有什么作用

当我们软件release模式打包或上线后,不会像我们在Xcode中那样直观的看到用崩溃的错误,这个时候我们就需要分析crashreport文件了,iOS设备中会有日志文件保存我们每个应用出错的函数内存地址,通过Xcode的Organizer可以将iOS设备中的DeviceLog导出成crash文件,这个时候我们就可以通过出错的函数地址去查询dSYM文件中程序对应的函数名和文件名。大前提是我们需要有软件版本对应的dSYM文件,这也是为什么我们很有必要保存每个发布版本的Archives文件了。

如何将文件一一对应

每一个xx.app和xx.app.dSYM文件都有对应的UUID,crash文件也有自己的UUID,只要这三个文件的UUID一致,我们就可以通过他们解析出正确的错误函数信息了。

1.查看xx.app文件的UUID,terminal中输入命令: dwarfdump--uuidxx.app/xx(xx代表你的项目名) 2.查看xx.app.dSYM文件的UUID,在terminal中输入命令: dwarfdump--uuidxx.app.dSYM 3.crash文件内第一行IncidentIdentifier就是该crash文件的UUID。

  

dSYM工具


于是我抽了几个小时的时间将这些命令封装到一个应用中,也为以后解决bug提供了便利。


使用步骤:


1.将打包发布软件时的xcarchive文件拖入软件窗口内的任意位置(支持多个文件同时拖入,注意:
文件名不要包含空格
)


2.选中任意一个版本的xcarchive文件,右边会列出该xcarchive文件支持的CPU类型,选中错误对应的CPU类型。


3.对比错误给出的UUID和工具界面中给出的UUID是否一致。


4.将错误地址输入工具的文本框中,点击分析。






终端命令方法,以下两种

第一种方法:


使用dwarfdump命令


dwarfdump--uuidxx.app.dSYM用来得到app的UUID。
dwarfdump--lookup0x12b45d-archarmv7xx.app.dSYM使错误的日志能看懂,把相应的内存地址对应到正确的地方。
如果一开始dwarfdump命令不能用的话,要先装CommandLineTools,这个在设置里面能下载(cmd+“,”打开设置)。另外还必须在进入.DSYM所在文件夹。


使用dwarfdump需要安装CommandLineTools,XCode里设置下载。而且需要进入.DSYM所在文件夹里进行操作。


第二种方法:




使用xcrunatos命令


atos-oYourApp.app.dSYM/Contents/Resources/DWARF/YourApp0x00062867




                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: