dSYM文件分析

article/2025/1/11 7:39:07


dSYM 文件

什么是 dSYM 文件

Xcode编译项目后,我们会看到一个同名的 dSYM 文件,dSYM 是保存 16 进制函数地址映射信息的中转文件,我们调试的 symbols 都会包含在这个文件中,

并且每次编译项目的时候都会生成一个新的 dSYM 文件,位于 /Users/beyond/Library/Developer/Xcode/Archives 目录下,

对于每一个发布版本我们都很有必要保存对应的 Archives 文件

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。













要分析崩溃日志,首先需要保留发布时的编译出来的.xcarchive文件。这个文件包含了.DSYM文件

我一般的做法是,发布成功后,把这个文件.xcarchive直接提交到代码版本库对应的版本分支里,这样就不会搞丢了。

这个文件在哪呢?打开XCode->菜单Window->Organizer,在编译成功的文件上右键,就能打开了。


两种比较麻烦的方法。

第一种方法:

使用dwarfdump命令

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

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



第二种方法:

使用xcrun atos命令

命令:atos -o YourApp.app.dSYM/Contents/Resources/DWARF/YourApp 0x出错地址



Application received signal SIGSEGV
(null)
(0   CoreFoundation                      0x00000001848270b8+ 1601   libobjc.A.dylib                     0x00000001907a5d78 objc_exception_throw + 602   CoreFoundation                      0x0000000184826fdc+ 03   JZH 0x1001d12f8 JZH + 19054004   libsystem_platform.dylib            0x0000000190f07b0c _sigtramp + 565   JZH 0x100445290 _ZN12CAXExceptionC2EPKci + 1877646   libsystem_pthread.dylib             0x0000000190f0c1b0+ 1687   libsystem_pthread.dylib             0x0000000190f0c108+ 08   libsystem_pthread.dylib             0x0000000190f097b0 thread_start + 4
)dSYM UUID: 981FC7CB-FC3F-351F-9C8E-88248232294B
CPU Type: arm64
Slide Address: 0x0000000100000000
Binary Image: JZH
Base Address: 0x00000001000d4000

命令:atos -o JZH.app.dSYM/Contents/Resources/DWARF/JZH 0x100445290

   CheckPrivateCloud(void*) (in JZH) (CCPClient.cpp:488)

命令:dwarfdump --lookup 0x100445290  -arch arm64 JZH.app.dSYM










命令:atos -o JZH.app.dSYM/Contents/Resources/DWARF/JZH 0x1001d12f8

   UmengSignalHandler (in JZH) + 144

命令:dwarfdump --lookup 0x1001d12f8 -arch arm64 JZH.app.dSYM




Application received signal SIGSEGV
(null)
(0   CoreFoundation                      0x255af0ef+ 1501   libobjc.A.dylib                     0x33a41c77 objc_exception_throw + 382   CoreFoundation                      0x255af01d+ 03   JZH 0x1a4711 JZH + 17057454   libsystem_platform.dylib            0x3415109b _sigtramp + 345   libstdc++.6.dylib                   0x33e3461b _ZNSs12_S_constructIPKcEEPcT_S3_RKSaIcESt20forward_iterator_tag + 706   libsystem_pthread.dylib             0x34155ddf+ 1387   libsystem_pthread.dylib             0x34155d53 _pthread_start + 1188   libsystem_pthread.dylib             0x34153afc thread_start + 8
)dSYM UUID: 53B95E22-1D47-31C8-9452-41875FFC7F89
CPU Type: armv7
Slide Address: 0x00004000
Binary Image: JZH
Base Address: 0x00004000




命令:atos -o JZH.app.dSYM/Contents/Resources/DWARF/JZH 0x1a4711

   UmengSignalHandler (in JZH) + 137


命令:dwarfdump --lookup 0x1a4711 -arch armv7 JZH.app.dSYM


目录下一定要包含MyApp.app 和MyApp.app.dSYM两个文件。

在控制台使用dwarfdump命令,解析出内存地址,如:

dwarfdump –lookup 0x000036d2 –arch armv6 MyApp.app.dSYM



つづく


























http://chatgpt.dhexx.cn/article/pl22OYMF.shtml

相关文章

iOS dSYM详解和分析crash,ips文件

1.什么是dSYM文件 dSYM 文件是Xcode编译后,我们会看到一个同名的 dSYM 文件,dSYM 是保存 16 进制函数地址映射信息的中转文件,存储应用程序的调试 symbols。每次编译项目或者打包的时候都会生成一个新的 dSYM 文件,当我们软件rel…

Xcode骚操作之:解决报错 MapFileParser.sh: Permission denied

MapFileParser.sh: Permission denied Unity项目,需要用Xcode运行,结果报了错误。 解决方案: 1、启动台》其它》选择 终端 ,输入以下命令: chmod空格x空格拖拽这个文件到小黑框 回车 注意:chmod x的意思…

ipa重签名的四种方式

文章为学习hank的视频笔记 一 开发者调试安装app到手机的签名过程 1. Mac电脑生成公钥M和私钥M 2. 公钥M传给苹果服务器,苹果服务器的私钥A对公钥M进行加密生成证书返回给xcode 3. Xcode下载profile等描述文件,用公钥M对app进行加密生成app签名,然后把app签名和证书以及p…

闲聊扯淡 | 微信8.0背景视频合集,笑死我了

微信 8.0 更新已经有几天了,最开始现在 IOS 端推行,昨天在安卓端也可以更新了,没有更新的小可爱快去更新试试吧。 除了重新高清化的表情以及衍生的表情包大战外,各种新玩法也被不断挖掘出来。 值得一提的就是微信 8.0 中是支持视频…

Unity简单操作:获取 apk在 苹果平台 或者 安卓平台,它自身的包名

在运行时返回应用程序标识。在 Apple 平台上为保存在 info.plist 文件中的“bundleIdentifier”,在 Android 平台上为 AndroidManifest.xml 中的“package”。(com.xxxx.xxxx)

iOS 多线程和GCD(Grand Central Dispath) 教程 (一)

iOS 多线程和GCD(Grand Central Dispath) 教程 (一) 本文翻译自 Ray Wenderlich 的博客 点击打开原文链接。全部由本人亲手翻译...童叟无欺~ 你有木有遇见过这样的情况,当你在写app的时候,有时候界面就卡住了,要等很长…

iOS【开发热门游戏_超级猜图Demo】

先看效果图 思路 需求分析 1,搭建界面 1》上半部分,固定的,用Storyboard直接连线(OK) 2》下半部分,根据题目的变化,不断变化和调整,用代码方式实现比较合适(OK) *备选按钮区域(OK) *答案按钮区域(OK)…

unity骚操作之: 解决AVPro Video在安卓移动端播放不了SteramAssecting里面的视频 或者 URL视频

Unity自带VideoPlay用来播放视频有bug,在移动端测试无法正常使用Url播放,所以找到AVProVideo,这个插件很好用,移动端亲测可用,功能也全,这里记录下使用心得 下载地址:支持Unity2019及以上版本AVProVideo1.11.5视频播放插件.zip_avpro安卓11不能播放-C#文档类资源-CSDN下…

unity普通操作:animator播放,暂停,判断播放完成【(增加1个判断如果这个是动画融合的情况)】

1.播放,暂停 anim.CrossFade("s2", 0); anim.speed0;//暂停 anim.speed1;//播放 判断播放完成(Update方式) void Update(){AnimatorStateInfo stateinfo2 anim.GetCurrentAnimatorStateInfo(0);//判断…

猫猫学IOS(五)UI之360等下载管理器九宫格UI

猫猫分享,必须精品 素材下载地址:http://blog.csdn.net/u013357243/article/details/44486651 先看效果 主要是完成了九宫格UI的搭建 代码 - (void)viewDidLoad {[super viewDidLoad]; //九宫格中每个格子的宽 #define kAppViewW 80 //九宫格中每个格…

猫猫学IOS(七)UI之UITextField代理事件_类似QQ登陆窗口的简单实现

猫猫分享,必须精品 素材代码地址: http://blog.csdn.net/u013357243/article/details/44587005 原文地址:http://blog.csdn.net/u013357243/article/details/44571163 先看效果图: 学习代码 // // NYViewController.m // 05-UITextFie…

国行Apple Watch 开启 ECG 心电图功能

国行Apple Watch 开启 ECG 心电图功能 设备要求 1.iphone 升级到最新系统 2.apple watch 升级到最新系统 3.最好有一台备用iphone来保证数据不被泄露 开通原理 1.我们需要有一个已开通ECG功能的appleId 2.登录此appleId到设备 3.同步健康App数据到本地 4.退出账号 5.登…

iOS开发:面向协议编程与 Cocoa 的邂逅 (上)

//联系人:石虎 QQ: 1224614774昵称:嗡嘛呢叭咪哄 喵神原文地址:https://onevcat.com/2016/11/pop-cocoa-1/ 本文是笔者在 MDCC 16 (移动开发者大会) 上 iOS 专场中的主题演讲的文字整理。您可以在这里找到演讲使用的 Keynote,部分示例代码可以在 MDCC …

猫猫学IOS(十三)UI之UITableView学习(下)汽车名牌带右侧索引

猫猫分享,必须精品 素材代码地址:http://blog.csdn.net/u013357243/article/details/44727225 原文地址:http://blog.csdn.net/u013357243?viewmodecontents 先看效果图 代码 ViewController //ps:新建iOS交流学习群&#xf…

在android上模拟ios阴影效果

update一下,下面方法现在来看很low,其实最简单的是直接自定义一个drawable android上大部分时候阴影是不符合产品需求的,就比如我们就要求实现一个类似ios的圆形图片的阴影??? cardview阴影就挺好,可是他喵了个咪的&#xff0…

猫猫学IOS(六)UI之iOS热门游戏_超级猜图

猫猫分享,必须精品 素材地址:http://blog.csdn.net/u013357243/article/details/44539069 原创文章,欢迎转载。转载请注明:翟乃玉的博客 地址:http://blog.csdn.net/u013357243?viewmodecontents 先看效果图 思路 需求分析…

iOS汇编基础(二)寄存器

以arm64为例 xcode调试汇编1. xcode 查看运行时的汇编代码 debug -> debug workflow -> always show disassembly 2. Xcode改变pc值 register write pc 0x1005d6928 3. 单步运行一步汇编代码:ni 4. 读取某个寄存器 (lldb) register read x0x0 = 0x0000000000000000…

Unity简单操作: DoTween的onCom..回调函数里面执行错误 不返回哪条函数出错的解决方案,与iOS平台为什么需要勾选安全模式

目录 DoTween的onCom..回调函数里面执行错误 不返回哪条函数出错的解决方案 当然 在iOS平台 测试好了的话 需要勾选它,不然iOS机制原因 会导致onComxx回调 没有执行! DoTween的onCom..回调函数里面执行错误 不返回哪条函数出错的解决方案 如下图&…

iOS汇编基础(一)

一 高级语言运行过程 二 汇编语言的特点 可以直接访问、控制各种硬件设备,比如存储器、CPU等,能最大限度地发挥硬件的功能能够不受编译器的限制,对生成的二进制代码进行完全的控制目标代码简短,占用内存少,执行速度快汇编指令是机器指令的助记符,同机器指令一一对应。每一…

STM32cubIDE 黑色主题_主题 | 喵咪旅行日志 VX可爱系列主题 BySasa

今天带来一款Sasa小宝贝儿投稿的可爱系列VX主题,应该也算是可爱系列里偏向简单的了。 鉴于前几次留言总是碰到隔着网线就不需要情商的DS。在前边先申明清楚吧,审美各有差异,不喜欢不用就好了。如果没有素质去diss投稿者作品,那就别…