iOS 使用.dSYM文件来符号化崩溃信息

.dSYM文件

是debugger Symbols 的简称,是一个符号表文件,保存 16 进制函数地址映射信息的中转文件,我们调试的 symbols 都会包含在这个文件中,包括文件名、函数名、行号等.

.crash文件

奔溃文件,当我们APP崩溃时会生成.crash文件,自动保存在设备本地,App上线以后苹果就会自动捕捉崩溃信息,当App出现Crash后iOS系统就会记录崩溃日志并上传到Appple的服务器。前提是需要用户同意 “与应用开发者共享”。
步骤为 设置->隐私->诊断与用量->与应用开发者共享
关于崩溃的确切语句和函数部分只有16进制地址符号,所以需要使用.dSYM文件来对地址进行解析,如下图,都是地址,没发直接阅读。


image.png

获取.dSYM文件分debug和release

release:选择window->organizer-archives,右击,选择Show in Finder就可以选中archived 文件然后显示包内容,就可以找到dSYM文件了。
debug:在项目工程里面的 Products 文件的 xxx.app 文件里面可以找到 xxxx.app.dSYM 文件,找不到需要在工程配置一下,然后重新运行。


image.png

获取crash文件分线上和线下

线上:如果APP已经上线了,直接打开xcode->window->organizer-Crashes,需要联网获取,如下图展示的就是你线上版本的crash日志,左上角可以切换不同的构建版本。


image.png

右键show in finder,就可以获取到对应的.crash文件,这个文件是已经符号化的,不需要解析,可以直接查看。


image.png

线下:APP崩溃后的日志是保存在手机上的,需要与电脑上的iTunes同步,即将崩溃日志保存在电脑上的文件夹中
具体文件位置:

Mac OS X:~/Library/Logs/CrashReporter/MobileDevice

Windows XP:C:\Documents and Settings\Application Data\Apple computer\Logs\CrashReporter

Windows 7/Vista: C:\Users\计算机登录名\AppData\Roaming\Apple Computer\Logs\CrashReporter\MobileDevice

或者直接使用xcode查看,xcode 会自动符号化


image.png

或者使用iTools进入“工具箱”tab,点击崩溃日志,进入崩溃日志页面,导出对应的crash文件。

symbolicatecrash

Xcode自带的崩溃分析工具,使用这个工具可以更精确的定位崩溃所在的位置,将0x开头的地址替换为响应的代码和具体行数。

➜  ~ find /Applications/Xcode.app -name 'symbolicatecrash'
/Applications/Xcode.app/Contents/Developer/Platforms/WatchSimulator.platform/Developer/Library/PrivateFrameworks/DVTFoundation.framework/symbolicatecrash
/Applications/Xcode.app/Contents/Developer/Platforms/AppleTVSimulator.platform/Developer/Library/PrivateFrameworks/DVTFoundation.framework/symbolicatecrash
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/PrivateFrameworks/DVTFoundation.framework/symbolicatecrash
/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash
这里使用最后一个
/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash

1.在桌面创建一个crash文件夹,然后将这个工具copy进去,使用命令如下

cp /Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash ~/Desktop/Crash

2.将获取到.crash,.dSYM,symbolicatecrash都放到刚刚创建的crash文件夹。执行如下命令

./symbolicatecrash ./*.crash ./*.app.dSYM > symbol.crash

如果报错Error: "DEVELOPER_DIR" is not defined at ./symbolicatecrash line 69.,再执行如下命令设置一下导出的环境变量

export DEVELOPER_DIR=/Applications/XCode.app/Contents/Developer

然后重新导出。

image.png

这个symbol.crash就是解析好的文件。打开如下
image.png

变成我们能看的懂得了。
参考文章:https://www.jianshu.com/p/480c0a2ac1a4
https://www.jianshu.com/p/0b6f5148dab8
http://www.cocoachina.com/articles/6677

还有个工具也不错dSYMTools
https://github.com/answer-huang/dSYMTools

推荐阅读更多精彩内容

  • [toc] 一、为什么要符号化? 对应线上app闪退日志,闪退的堆栈都是以下格式 这种信息开发肯定无法找到具体的报...
    fanglaoda阅读 4,065评论 0 17
  • 在 App 审核时,可能会出现类似下图这种被拒的情况: 原来出现了闪退,这对于 App 是个致命的问题,要马上修复...
    NSScorpio阅读 4,395评论 4 10
  • 最近一段时间,在iOS开发调试过程中以及上线之后,程序经常会出现崩溃的问题。简单的崩溃还好说,复杂的崩溃就需要我们...
    f9dd77add98e阅读 18,388评论 12 73
  • 前言 崩溃是让发人员比较头痛的事情,app崩溃了,说明代码写的有问题,这时如何快速定位到崩溃的地方很重要。调试阶段...
    進无尽阅读 1,613评论 0 9
  • 近几天,总是阴雨连绵。气温有点低,不至于那么焦躁,也不暴晒,宅在家里好闷。看来,应是出去游玩的好天气呢。凤湖,不远...
    星光依然闪烁阅读 532评论 -1 19
  • 今夜有暴风雨 风起云涌
    e0b8eb77ced1阅读 135评论 0 0
  • 鸟儿的目光没有落到一处 而是四逸逃离 遍野开花 雨水再也没有回到大地的身体 却独辟蹊径 修改了土地和村庄 夕阳下的...
    Jiaqingjun阅读 170评论 0 3
  • 大家好,我是IT修真院郑州分院第五期的学员王姝丽,一枚正直、纯洁、善良的前端程序员。 今天给大家分享一下,修真院官...
    渣渣啊123阅读 4,224评论 0 5