最近優(yōu)化項目胯究,整理了一下如何分析第三方統(tǒng)計上來的bug;
前提是你知道了bug出現(xiàn)的當(dāng)前的.dSYM躁绸,分渠道匹配.dSYM在這里就不細說了裕循。網(wǎng)上一堆這方面的資源。
從堆棧信息可以看出問題出現(xiàn)的十六進制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行選任意一行執(zhí)行都可以達到目的庭瑰,其中0x4000是模塊的加載地址星持,從上面的章節(jié)可以找到如何得到這個地址。)
arm64:
xcrun atos -o AppName.app.dSYM/Contents/Resources/DWARF/AppName -l 0x1000d8000 0x000000010011a8b0 -arch arm64
第一步:找到對應(yīng)archive出來的.dSYM;
第二步 iterm中執(zhí)行命令 如果是armv7的執(zhí)行上面的三句命令的一句弹灭;我執(zhí)行的是這一條
xcrun?atos?-o?appName.app.dSYM/Contents/Resources/DWARF/appName?-l?0x4000?-arch?armv7
然后再輸入符號地址即可得到bug所在目錄
從終端可以很清晰的看到問題出現(xiàn)所在的文件以及bug所在的行督暂;
release 打包后斷言(NSAssert1)是被屏蔽的,也就是上面的if判斷不起任何作用穷吮,所以這個地方有點自以為是了逻翁;
http://www.cocoachina.com/industry/20140514/8418.html 此文章撰寫的其它兩張解決bug的方法也比較好,可以研究一下捡鱼;