来到新公司后,前段时间就一直在忙,前不久 项目 终于成功发布上线了,最近就在给项目做优化,并排除一些线上软件的 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下载地址  项目源码地址

iOS-dSYM 文件分析工具相关推荐

  1. MAT堆栈文件分析工具的使用

    MAT堆栈文件分析工具的使用 第一步:下载MAT:https://www.eclipse.org/mat/ 第二步:配置mat内存大小,否则可能打不开大文件 第三步:运行MemoryAnalyzer. ...

  2. MFC 文件分析工具,弹出“遇到不适当的参数”对话框

    做文件分析工具,自己电脑上好的,别人电脑上一直有问题.弹出"遇到不适当的参数"的对话框,跟踪之后发现. 存在数组越界.我的代码是从文件中取出一行数据之后,按照",&quo ...

  3. iOS通过dSYM文件分析crash

    http://blog.csdn.net/hjy_x/article/details/20929095 重点是dwarfdump --uuid命令 我们在ios开发中会碰到的很多crash问题,如果D ...

  4. 三、iOS逆向:文件分析工具安装

    设备环境: 硬件环境:iPhone6.0.Mac电脑Big Sur(M1 芯片). 软件环境:已破壳ipa.IDA_pro_for_mac.class-dump. 2. 软件简绍: 砸壳工具:Bfin ...

  5. hprof文件分析工具_【赵强老师】如何分析Java的内存溢出问题

    欢迎关注赵强老师微信公众号:myitshare 一.什么是内存溢出? 内存溢出(OOM:out of memory)通俗理解就是内存不够,通常在运行大型软件或游戏时,软件或游戏所需要的内存远远超出了你 ...

  6. redis源码剖析(十四)—— dump.rdb文件分析工具

    分析rdb文件的工具 安装 git clone https://github.com/sripathikrishnan/redis-rdb-tools.git sudo pip install --u ...

  7. hprof文件分析工具_应用稳定性优化系列(三),资源泄露问题分析及定位

    继介绍稳定性ANR类故障和Crash/Tombstone类故障后,本章将介绍第三大类故障资源泄露及其典型场景.分析定位和解决方法. 1  资源泄露问题原因分析 2  典型泄露场景 静态变量长期维持到大 ...

  8. Java Heap dump文件分析工具jhat简介

    jhat 是Java堆分析工具(Java heap Analyzes Tool). 在JDK6u7之后成为标配. 使用该命令需要有一定的Java开发经验,官方不对此工具提供技术支持和客户服务. 用法: ...

  9. java heap分析工具_Java Heap dump文件分析工具jhat简介

    [开发.应用中老是会遇到OutOfMemory异常,而且常常是过一段时间内存才被吃光,这里可以利用java heap dump出jvm内存镜像,然后再对其进行分析来查找问题.<java heap ...

  10. dump文件分析工具_使用这个 Python 工具分析你的 Web 服务器日志文件 | Linux 中国...

    导读:这个 Python 模块可以以多种格式收集网站使用日志并输出良好结构化数据以进行分析. 本文字数:3262,阅读时长大约:4分钟https://linux.cn/article-12512-1. ...

最新文章

  1. 德鲁克管理思想:管理的7大理论、43条原则,每一条都是精华
  2. [projectEuler.net]12
  3. 易语言关闭指定窗口_易语言取外部程序指定窗口位置源码 _易语言源码网_易语言资源网...
  4. RocketMQ各种集群模式介绍
  5. oracle 三个口令管理,Oracle学习笔记(12)口令和资源管理
  6. python 数据框缺失值_Python:处理数据框中的缺失值
  7. [css] 移动端1px像素的问题及解决方案是什么?
  8. JavaScript数组sort()方法小结
  9. u盘安装linux 提示no such device_IGH EtherCAT 开源主站安装及测试
  10. ActiveMQ简单介绍以及安装
  11. 0-Day CI : 我是Linux内核质检员
  12. Linux sed命令实例
  13. Citrix XenApp工作原理
  14. java 生成 rtf,JAVA实现BI报表中RTF模版转PDF
  15. 破解补丁的方式 无限期破解idea
  16. java 空格 separater_Java随手记
  17. 【Python】Pandas实用技能,数据筛选query函数详细介绍
  18. 2018 ACM-ICPC Syrian Collegiate Programming Contest(部分题解,待补)
  19. 集成机器学习服务上架华为应用市场指南
  20. 专家称谷歌收购摩托罗拉意在专利

热门文章

  1. 深度学习(二),终于理解了深度学习原理--SPGD(SGD)优化算法的实现原理
  2. 42步进电机转速力矩曲线_42步进电机转速范围说明(28步进电机转速测试)
  3. leetcode 剑指 Offer 12. 矩阵中的路径
  4. yolo算法部分简单理解
  5. (1)pytorch 实现 minist手写数据集(cpu/gpu)版本
  6. 【2】使用MATLAB进行机器学习(回归)
  7. 蓝牙耳机的两种通讯协议及奥秘
  8. Mac xelatex
  9. xbox 手柄按键测试软件,unity中链接Xbox手柄设置及按键检测
  10. 利用微搭低代码实现公差申请