最近优化项目,整理了一下如何分析第三方统计上来的bug;
前提是你知道了bug出现的当前的.dSYM,分渠道匹配.dSYM在这里就不细说了。网上一堆这方面的资源。
arm64堆栈信息 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;
archives文件所在 archives解包第二步 iterm中执行命令 如果是armv7的执行上面的三句命令的一句;我执行的是这一条
xcrun atos -o appName.app.dSYM/Contents/Resources/DWARF/appName -l 0x4000 -arch armv7
然后再输入符号地址即可得到bug所在目录
iterm执行命令从终端可以很清晰的看到问题出现所在的文件以及bug所在的行;
code一看一目了然release 打包后断言(NSAssert1)是被屏蔽的,也就是上面的if判断不起任何作用,所以这个地方有点自以为是了;
http://www.cocoachina.com/industry/20140514/8418.html 此文章撰写的其它两张解决bug的方法也比较好,可以研究一下;
网友评论