dSYM文件

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

时间: 2024-10-13 00:54:33

dSYM文件的相关文章

dSYM文件分析

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

dSYM 文件分析工具

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

iOS 技术篇: 如何利用dsym文件分析苹果被拒日志

今天提审被拒了.伤心?? 苹果给出被拒崩溃的原因如下 全是二进制 完全看不出问题 不得已 只能用dsym去解析日志文件. 首先我去下载了dsym 解析工具:   附上地址 : https://github.com/answer-huang/dSYMTools 运行程序. 接下来进入重点: 第一步: 如何找到dsym文件 ? (1)在xcode工具栏里 找到Window - organizer (2)找到发版包 Show in Finder ---- 显示包内容 这时候呢 就可以看到dsym文件了

iOS如何在iTunes网站查看并下载APP的dsym文件

有时需要拿到app的dsym符号表文件,恰巧本地的构建版本文件已经不在了,那么我们还可以在iTunes那边获取到. 步骤不复杂: 1.登陆itunes网站 https://itunesconnect.apple.com/ 2.找到你的APP,点进去,选择[活动]-> 选择对应的构建版本 3.直接下载就行了

ios bitcode 机制对 dsym 调试文件的影响

今天想试试用dsym和crash文件跟踪crash信息,可是一直返回如下信息: Thread 0 name: Dispatch queue: com.apple.main-thread Thread 0 Crashed: 0 libsystem_kernel.dylib 0x23269c84 __pthread_kill + 8 1 libsystem_pthread.dylib 0x2330bb46 pthread_kill + 62 2 libsystem_c.dylib 0x232000c

利用.dSYM跟.app文件准确定位Crash位置

本文转载至  http://blog.csdn.net/lvxiangan/article/details/28102629 利用.dSYM和.app文件准确定位Crash位置首先,确保在release(Ad Hoc或者App Store)一个版本时,保存了对应的xxx.app和xxx.dSYM文件. 其次,验证xxx.crash.xxx.app和xxx.dSYM三者的uuid是否一致. 验证方法: 1)查看xxx.app的uuid. [plain] view plaincopy $ dwarf

清理XCode无用的文件(转)

目录如下,直接删除即可: 1.移除对旧设备的支持 影响:可重新生成:再连接旧设备调试时,会重新自动生成.我移除了4.3.2, 5.0, 5.1等版本的设备支持. 路径: [~/Library/Developer/Xcode/iOS DeviceSupport] 2.移除旧版本的模拟器支持 影响:不可恢复:如果需要旧版本的模拟器,就需要重新下载了.我移除了4.3.2, 5.0, 5.1等旧版本的模拟器. 路径: [~/Library/Application Support/iPhone Simul

使用dSYM分析App崩溃日志

前言 我们在开发App过程中,因为连接到控制台,所以遇到问题会很容易找到问题代码.但是对于线上的App出现Crash的时候,我们不可能通过这种方式,也不现实,所以我们只能通过收集Crash信息,来解决Bug.而这种收集Crash信息并且分析定位到具体代码的第三方SDK很多.但是今天我们来自己实现一下. 收集 Crash 信息 Apple提供了NSException类来帮助我们收集异常信息. NSException is used to implement exception handling a

iOS: Crash文件解析(一)

iOS Crash文件的解析(一) 开发程序的过程中不管我们已经如何小心,总是会在不经意间遇到程序闪退.脑补一下当你在一群人面前自信的拿着你的App做功能预演的时候,流畅的操作被无情地Crash打断.联想起老罗在发布Smartisan OS的时候说了,他准备了10个手机,如果一台有问题,就换一台,如果10台后挂了他就不做手机了.好了不闲扯了,今天就跟大家一起聊聊iOSCrash文件的组成以及常用的分析工具. 有一个WWDC 2010的视频推荐大家抽空看看,视频名称“Understanding C