atos 符号化.dSYM中的bug

最近优化项目,整理了一下如何分析第三方统计上来的bug;

前提是你知道了bug出现的当前的.dSYM,分渠道匹配.dSYM在这里就不细说了。网上一堆这方面的资源。

atos 符号化.dSYM中的bug_第1张图片
arm64堆栈信息
atos 符号化.dSYM中的bug_第2张图片
armv7堆栈信息
armv7和arm64下的地址

从堆栈信息可以看出问题出现的十六进制stock Address 也就是第3条;

armv7下 stock Address = slide Address + 252657 + 0x4000;

符号化地址 = stock Address - slide Address;

arm64下 符号化地址为 start Address ~ stock Address;

下面通过atos 命令来符号化bug所在代码;

armv7:

xcrun atos -o appName.app.dSYM/Contents/Resources/DWARF/appName -l 0x4000 -arch armv7

xcrun atos -o appName.app.dSYM/Contents/Resources/DWARF/appName -arch armv7

xcrun atos -o appName.app/appName -arch armv7

(注:这3行选任意一行执行都可以达到目的,其中0x4000是模块的加载地址,从上面的章节可以找到如何得到这个地址。)

arm64:

xcrun atos -o AppName.app.dSYM/Contents/Resources/DWARF/AppName -l 0x1000d8000 0x000000010011a8b0 -arch arm64

第一步:找到对应archive出来的.dSYM;

atos 符号化.dSYM中的bug_第3张图片
archives文件所在
atos 符号化.dSYM中的bug_第4张图片
archives解包

第二步 iterm中执行命令 如果是armv7的执行上面的三句命令的一句;我执行的是这一条

xcrun atos -o appName.app.dSYM/Contents/Resources/DWARF/appName -l 0x4000 -arch armv7

然后再输入符号地址即可得到bug所在目录

atos 符号化.dSYM中的bug_第5张图片
iterm执行命令

从终端可以很清晰的看到问题出现所在的文件以及bug所在的行;

atos 符号化.dSYM中的bug_第6张图片
code一看一目了然

release 打包后断言(NSAssert1)是被屏蔽的,也就是上面的if判断不起任何作用,所以这个地方有点自以为是了;

http://www.cocoachina.com/industry/20140514/8418.html 此文章撰写的其它两张解决bug的方法也比较好,可以研究一下;

你可能感兴趣的:(atos 符号化.dSYM中的bug)