iOS crash日志堆栈地址符号化
.dsym(符号表文件)
.crash(崩溃日志)
.app (Optional)
.app不是必然需要的,目前我看到不需要也是没问题的,只是会报警告(说的不对请轻喷):
## Warning: Unable to symbolicate from required binary: /Users/wind/Library/Developer/Xcode/iOS DeviceSupport/10.1.1 (14B100)/Symbols/System/Library/Frameworks/CoreMotion.framework/CoreMotion
1.首先我们一起找到需要的文件
1.1获取.dSYM文件
1.1.1 使用Xcodebuild编译打包
Xcodebuild编译生成文件1.1.2 使用Xcode的Archive导出
Xcode->product->Archive,右键Show in Finder,如果一个Show in..不能解决,当然就是两个啦。
1.1.3 使用make编译打包(没用过)
如果开发团队不使用Xcode编译打包,而是使用make编译生成.o文件,然后打包发布。此时编译过程不会有.dSYM生成,开发者可用使用dsymutil工具 从.o文件中提取符号信息。
1.2获取.crash文件
如果用户设置为同步崩溃日志,那可以在Xcode->Window->Organizer->Crashes->Show in Finder里找到.xccrashpoint,右键显示包内容里就可以看到.crash文件
如果用户没有设置同步崩溃日志,则需要用户把.crash设置为同步崩溃日志。(要么你让用户发给你,如果用户知道怎么发的话.........)
2.检查UUID
要想把.crash的堆栈地址转成我们熟知的函数,首先要确定它们UUID是否一致。
查询UUID方法如下(.app,.dsym):
dwarfdump —uuid xxx.app
dwarfdump —uuid xxx.dsym
.crash文件无法使用上述方式查询。它的UUID需要打开它,并找到Binary Images的位置。
.crash文件Binary Images上述UUID一致的情况下,就可以执行第3步
3.使用symbolicatecarsh工具查询
要使用symbolicatecrash肯定要先找到它在哪儿?
可以在终端使用命令行查找:
find /Applications/Xcode.app -name symbolicatecrash -type f
此处为我mac上symbolicatecarsh的位置:
/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash
接着,我们把xxxx.crash 与xxxx.dSYM文件放在同一个文件夹下。
示例如下:
测试目录下的文件在终端切换到当前目录,之后使用之前找到的symbolicatecarsh工具,输入如下:
/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Vers
ions/A/Resources/symbolicatecrashtest.crash test.dSYM > test.log
注:命令执行需要时间,如果在命令执行结束后test.log内容为空,可以输入:
export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer
之后在重新尝试symbolicatecarsh命令。
4.使用atos查询单个堆栈地址
其中<>内的参数都是来自.crash文件内,Binary Images,可以参考苹果给的图
苹果官网截的图使用示例:
atos -arch arm64 -o TheElements.dSYM/Contents/Resources/DWARF/TheElements -l 0x1000e4000 0x00000001000effdc
参考资源:
苹果官方之崩溃信息如何查看:https://developer.apple.com/library/content/technotes/tn2151/_index.html
解决symbolicatecrash打出空白.loghttp://blog.csdn.net/my_programe_life/article/details/50686174