如果你真心找不到dSYM,那也不用完全绝望,刚才已经说了,crashlog里面没解出来的那行是符号表地址。ipa包里面的可执行文件也会有符号表和对应地址。所以也能解出log来O(∩_∩)O~~
好,咱们试试
这次我们要借住另一个工具,叫atos,在/Applications/Xcode.app/Contents/Developer/usr/bin/atos
/usr/bin/atos
这次我们需要ipa包里面的可执行文件,如果解开ipa包我不说了,迷茫的自己google
atos使用方法是 atos -arch architecture -o binary -l xxx xx ,其中xxx为段地址,xx为偏移地址
按照习惯,先验证一下UUID,
dwarfdump -u CrashDemo
UUID: 6F6C3E53-2D27-3D51-8A5B-65E94476372F (armv7) CrashDemo
UUID: 36DBB225-755E-366E-B8B6-8B2F38C767E8 (armv7s) CrashDemo
UUID: 4A302375-CA31-35E8-8B45-05A789CDB707 (arm64) CrashDemo
然后:
atos -o CrashDemo -arch armv7 -l 0x94000 0x0009b290
-l 0x94000 0x0009b290
代表的就是crashlog里面对应行的偏移地址和段地址了
运行结果如下。和上一篇文章 iOS开发 -- 分析CrashLog (1) 的方法得到的一模一样 。喜大普奔吧~
ps:此方法依然使用于dsym文件
总结:
1.解crashlog不一定要有dSYM文件。
2.每次注意验证UUID是否对应
3.uuid可能有多个,只要有一个对应上就行
4.atos 同时也适用与dsym文件
5.atos -arch的参数要依据crash文件而定
最后我贴出我写低一个脚本,虽然粗糙,但是应付这种问题还是很省事的 。
关于利用dsym文件解log,请移动步 iOS开发 -- 分析CrashLog (1)