问题场景
大部分情况下,我们都拿不到dSYM文件,只有一份ipa文件+一个crash文件,应该如何定位具体崩溃的代码呢?
实例说明
首先本人建立了一个demo工程,写了一段会crash的代码,如下图
然后打包成ipa包,如下
安装到手机上,运行,得到崩溃日志,如下
可以看到上面有两个信息,一个是运行崩溃的手机架构是arm64,一个是下面的未符号化的地址信息。
1,首先我们需要先对我们的执行文件瘦身,获取到arm64的执行文件,使用命令
lipo -thin arm64 test/yzzs -output test/yzzs_arm64
yzzs是ipa中的执行文件,后面是输出文件,执行完如下
2,下载工具restore-symbol.
3,执行restore-symbol工具命令得到符号化的执行文件,使用命令
./restore-symbol test/yzzs_arm64 -o test/yzzs_symbol
yzzs_arm64是上一个步骤得到的arm64架构的执行文件,后面是输出符号化后的执行文件
4,下面通过系统工具atos导出对应的符号化后的地址,使用命令
atos -arch arm64 -o test/yzzs_symbol -l 0x100e00000 0x0000000100e061cc 0x100e00000 0x0000000100e06068
执行完如下,地址信息被符号化出来了,并不需要用到dSYM文件
完毕