美文网首页iOSIOS技术精华iOS Developer
iOS DSYMs 的作用及解析工具

iOS DSYMs 的作用及解析工具

作者: 逆行风 | 来源:发表于2016-11-25 07:27 被阅读122次

今天突然有网友问我,我之前写过的文章里面, DownLoad DSYMs 这个按钮是干什么的,说来也惭愧,时间太长,当时也没有表述明确,所以在这里单独开一篇文章,专门解释 DSYMs 的作用.

因为在网上直接找到了现成的说明文章,所以直接转载啦..

转载自:http://answerhuang.duapp.com/index.php/2014/07/06/dsym_tool/?from=groupmessage&isappinstalled=0

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

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

dSYM 文件

什么是 dSYM 文件

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

dSYM 文件有什么作用

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

如何将文件一一对应

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

1.查看 xx.app 文件的 UUID,terminal 中输入命令 :

dwarfdump --uuid xx.app/xx (xx代表你的项目名)

2.查看 xx.app.dSYM 文件的 UUID ,在 terminal 中输入命令:

dwarfdump --uuid xx.app.dSYM

3.crash 文件内第一行 Incident Identifier 就是该 crash 文件的 UUID。

dSYM工具

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

使用步骤:

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

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

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

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

Mac app下载地址http://download.csdn.net/detail/marujunyy/7718089

项目源码地址https://github.com/answer-huang/dSYMTools

相关文章

  • iOS DSYMs 的作用及解析工具

    今天突然有网友问我,我之前写过的文章里面, DownLoad DSYMs 这个按钮是干什么的,说来也惭愧,时间太长...

  • iOS dSYMs文件UUID不对应

    解析iOS崩溃日志时,发现崩溃日志中的UUID和dSYMs文件中的UUID不对应。两种解决方法: 从iTunes ...

  • XML*

    目录 XML简介 XML基本语法 XML解析 * DOM解析   * DOM解析原理及工具   * DOM4J解析...

  • IOS学习(15)-UITableView

    iOS开发系列--UITableView全面解析UITableViewCell详解UITableView属性及方法...

  • iOS 壁纸类项目核心总结

    iOS解析M3U8文件及TS文件下载与合并iOS下编译FFmpeg的经验及各种错误收集处理# iOS开发 - 超详...

  • 27-javap指令

    一、解析字节码的意义 javap是JDK自带的反解析工具。它的作用就是根据 Class 字节码文件,反解析出当前类...

  • 完善改写重签名Mac工具

    参考: iOS App 签名的原理 iOS企业重签名问题及经验 iOS重签名工具开发之路(介绍篇) ios-app...

  • iOS isKindOfClass isMemberOfClas

    iOS isKindOfClass isMemberOfClass 底层源码原理解析及练习 直接看源码 看源码大家...

  • SpringBoot 序列化器注解使用方法

    Json解析工具Jackson @JsonIgnoreProperties此注解是类注解,作用是json序列化时将...

  • 《iOS进阶-唐巧》阅读记录

    2019.1.7 略看目录结构:引言、iOS开发工具(介绍多种开发工具的实际使用)、iOS开发实践(内存管理及各种...

网友评论

    本文标题:iOS DSYMs 的作用及解析工具

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