iOS开发-dSYM文件

article/2025/1/11 8:18:18

文章目录

  • dSYM
  • xcode的符号化解析
    • 每个架构的符号
  • Bitcode相关
  • 定位你的dSYM
  • Build UUID对比
  • 恢复隐藏的符号表文件
  • 符号化解析操作命令
  • 命令行工具 symbolicatecrash 符号化

dSYM

根据 苹果官方文档,当编译器将源代码转为机械码时,会生成调试符号(debug symbols),通过这些符号可以将机械码映射回到源代码的位置,也就是我们常说的符号化解析

这些调试符号存储在二进制文件中,或者存储在相应的调试符号(dSYM)文件中。默认情况下,应用程序的调试构建将调试符号存储在编译后的二进制文件中,而应用程序的发布(Archive)构建将调试符号存储在相应的dSYM文件中,以减少二进制文件的大小。

通过Archive生成的包里面,都会有一个.dSYM文件

xcode的符号化解析

xcode可以帮我们进行符号化解析
点击Xcode顶部工具栏->Windows->Devices and Simulators->选中设备->View Device Logs就可以查看设备中崩溃信息,你也可以拖拽未符号化的.crash文件到左侧栏,xcode会自动帮你符号化解析.

值得注意的是,文件必须是.crash后缀才行,你可以将.txt等类型文件进行重命名后拖入
在这里插入图片描述
由于可执行文件区分各个架构,例如arm64,armv7s,i386,那么每个架构也有对应的.dSYM

每个架构的符号

符号是特定于操作系统版本和设备的CPU架构
例如,同一个包,运行iOS 13.1.0iPhone与运行iOS 13.1.2iPhone的符号不一样。如果您的应用程序运行在支持多种CPU架构(如arm64arm64e)的操作系统版本上,那么具有arm64架构的设备将只包含操作系统框架的arm64版本的符号,它不会有arm64e设备上的操作系统框架的符号

Bitcode相关

Bitcode是位于代码机械码之间的已编译代码的中间形式。

代码->Bitcode->机械码

这就意味着使用Bitcode设置的包,会在上传后,由App Store进行编译,是无法在打包编译时就获取到.dSYM,你可以在上传后,在Archive的界面进行下载。见 官方文档

在这里插入图片描述

定位你的dSYM

有时候你想知道对应某个崩溃日志的.dSYM文件是否存在在你的Mac上,你可以这样定位。

  1. 首先崩溃日志信息

在这里插入图片描述

这里如图,你可以查看崩溃堆栈的倒数第二行对应的App名称,通过命令查看其UUID

//这里test.crash为崩溃日志名
//TouchCanvas为app名
grep --after-context=1000 "Binary Images:" test.crash | grep TouchCanvas
//然后输出为 - 这里其实就是文本过滤下
0x1022c0000 - 0x1022effff TouchCanvas arm64  <9cc89c5e55163f4ab40c5821e99f05c6>

对应Binary imageUUID,通过格式转换为32个大写字符,8-4-4-4-12 (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX),然后通过命令进行查看

mdfind "com_apple_xcode_dsym_uuids == 9CC89C5E-5516-3F4A-B40C-5821E99F05C6"

如果没有找到,是不会有任何输出的。如果应用使用Bitcode,就应该从App store下载.dSYM

如果没有找到对应的.dSYM,那么就无法解析,避免以后无法分析日志,就应该重新打包上传。

找到.dSYM后,还要进行构建的UUID对比


Build UUID对比

//PathToDSYMFile .dSYM路径
//BinaryName 二进制文件名,如上述的TouchCanvas
dwarfdump --uuid <PathToDSYMFile>/Contents/Resources/DWARF/<BinaryName>
//PathToBinary 二进制文件路径
dwarfdump --uuid <PathToBinary>

恢复隐藏的符号表文件

对于Bitcode打包的app,上传后下载的.dSYM中会用_hidden#109_等表示替换原有的符号,需要进行转换。

如果是通过xcode下载(Archive界面的Download Debug Symbols按钮下载的)的.dSYM是自动做了这个操作。

如果是通过网页App Store上下载的,就需要手动进行恢复

dsymutil -symbol-map <PathToXcodeArchive>/MyGreatApp.xcarchive/BCSymbolMaps <PathToDownloadedDSYMs>/<UUID>.dSYM

符号化解析操作命令

对于特殊的调试情况,例如LLDB命令行的崩溃日志信息,可以通过atos命令将崩溃报告符号化

atos -arch <BinaryArchitecture> -o <PathToDSYMFile>/Contents/Resources/DWARF/<BinaryName>  -l <LoadAddress> <AddressesToSymbolicate>//BinaryArchitecture 为架构信息 arm64 ...
//PathToDSYMFile .dSYM文件路径
//BinaryName 二进制文件名
//LoadAddress 需要解析的地址
//AddressesToSymbolicate 符号表中的地址

例如下面:

atos -arch arm64 -o TouchCanvas.app.dSYM/Contents/Resources/DWARF/TouchCanvas -l 0x1022c0000 0x00000001022df754//解析得到
ViewController.touchesEstimatedPropertiesUpdated(_:) (in TouchCanvas) + 304

命令行工具 symbolicatecrash 符号化

symbolicatecrash工具可以将Crash文件全部符号化,相比 atos 每条解析来说更方便快捷

# 找到 symbolicatecrash 工具并拷贝出来
find /Applications/Xcode.app -name symbolicatecrash -type f
# 会返回几个路径,拷贝其中一个
/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash# 引入环境变量
export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer
# 符号解析
./symbolicatecrash appName.crash .dSYM文件路径 > appName.log
./symbolicatecrash appName.crash appName.app > appName.log
# 将符号化的 crash log 保存在 appName.log 中
./symbolicatecrash appName.crash appName.app > appName.log

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

相关文章

ios崩溃日志分析,无dSYM文件

问题场景 大部分情况下&#xff0c;我们都拿不到dSYM文件&#xff0c;只有一份ipa文件一个crash文件&#xff0c;应该如何定位具体崩溃的代码呢&#xff1f; 实例说明 首先本人建立了一个demo工程&#xff0c;写了一段会crash的代码&#xff0c;如下图 然后打包成ipa包&…

命令行工具解析Crash文件,dSYM文件进行符号化

https://www.jishux.com/p/10628644fe5dabf3 序 在日常开发中&#xff0c;app难免会发生崩溃。简单的崩溃还好说&#xff0c;复杂的崩溃就需要我们通过解析Crash文件来分析了&#xff0c;解析Crash文件在iOS开发中是比较常见的。 获取崩溃信息方式 在iOS中获取崩溃信息的方…

iOS-dSYM 文件分析工具

来到新公司后&#xff0c;前段时间就一直在忙&#xff0c;前不久 项目 终于成功发布上线了&#xff0c;最近就在给项目做优化&#xff0c;并排除一些线上软件的 bug&#xff0c;因为项目中使用了友盟统计&#xff0c;所以在友盟给出的错误信息统计中能比较方便的找出客户端异常…

DSYM文件

什么是dSYM文件&#xff1f; iOS平台中&#xff0c;dSYM文件是指具有调试信息的目标文件&#xff0c;文件名通常为&#xff1a;xxx.app.dSYM。如下图所示&#xff1a; 为了方便找回Crash对应的dSYM文件和还原堆栈&#xff0c;建议每次构建或者发布APP版本的时候&#xff0c;备…

Xcode打包后,找不到dSYM文件

在一次分析crash时&#xff0c;需要用到dSYM文件&#xff0c;于是去对应的位置找&#xff0c;结果找到一个空文件夹&#xff0c;里面什么都没有&#xff0c;这是怎么回事&#xff1f; 后来发现是在打包的时候&#xff0c;在TARGET->Building Setting->Build Option下的设…

dSYM文件是什么 ?

Overview 概述 dSYM的全称是debug symbol, 所以dSYM文件就是debug symbol (dSYM) file, dSYM文件中的每个 debug symbol, 对应了一个关系, 这个关系一端是源代码里真实的符号(类名称、全局变量以及方法和函数名称), 另一端则是其定义的文件号和行号. Apple Documentation 苹果…

通过dSYM文件分析crash日志

一、获取crash日志 1、连接崩溃手机&#xff0c;同步 2、日志保存位置&#xff1a; ~/Library/Logs/CrashReporter/MobileDevice/ 3、找到对应的手机和对应的crash文件 二、获取dsym文件 1、 XCode -> Window -> Organizer -> Archiver 找到对应的打包项目&#xf…

手动解析App dSYM示例

https://www.jianshu.com/p/c507f95646bd 前期准备 崩溃日志地址(涉及敏感数据已屏蔽)对应app 的 dSYM文件&#xff0c;利用dwarfdump --uuid <file_to_detect>检测dSYM文件uuid和app执行文件uuid是否匹配 $ dwarfdump --uuid APP_BUNDLE_NAME.app.dSYMUUID: F181E27B…

dSYM介绍

在XCODE编译项目之后,会在app旁看见一个同名的dSYM文件. 他是一个编译的中转文件,简单说就是debug的symbols包含在这个文件中. 他有什么作用? 当release的版本 crash的时候,会有一个日志文件,包含出错的内存地址,使用symbolicatecrash工具能够把日志和dSYM文件转换成可以阅读的…

dSYM文件分析

dSYM 文件 什么是 dSYM 文件 Xcode编译项目后&#xff0c;我们会看到一个同名的 dSYM 文件&#xff0c;dSYM 是保存 16 进制函数地址映射信息的中转文件&#xff0c;我们调试的 symbols 都会包含在这个文件中&#xff0c; 并且每次编译项目的时候都会生成一个新的 dSYM 文件&am…

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

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

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

MapFileParser.sh: Permission denied Unity项目&#xff0c;需要用Xcode运行&#xff0c;结果报了错误。 解决方案&#xff1a; 1、启动台》其它》选择 终端 &#xff0c;输入以下命令&#xff1a; chmod空格x空格拖拽这个文件到小黑框 回车 注意&#xff1a;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 更新已经有几天了&#xff0c;最开始现在 IOS 端推行&#xff0c;昨天在安卓端也可以更新了&#xff0c;没有更新的小可爱快去更新试试吧。 除了重新高清化的表情以及衍生的表情包大战外&#xff0c;各种新玩法也被不断挖掘出来。 值得一提的就是微信 8.0 中是支持视频…

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

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

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

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

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

先看效果图 思路 需求分析 1&#xff0c;搭建界面 1》上半部分&#xff0c;固定的&#xff0c;用Storyboard直接连线(OK) 2》下半部分&#xff0c;根据题目的变化&#xff0c;不断变化和调整&#xff0c;用代码方式实现比较合适(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.播放&#xff0c;暂停 anim.CrossFade("s2", 0); anim.speed0&#xff1b;//暂停 anim.speed1&#xff1b;//播放 判断播放完成&#xff08;Update方式&#xff09; void Update(){AnimatorStateInfo stateinfo2 anim.GetCurrentAnimatorStateInfo(0);//判断…

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

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