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