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
然后重新导出。
这个symbol.crash就是解析好的文件。打开如下
image.png
变成我们能看的懂得了。
参考文章:https://www.jianshu.com/p/480c0a2ac1a4
https://www.jianshu.com/p/0b6f5148dab8
http://www.cocoachina.com/articles/6677