atos 符号化.dSYM中的bug

作者: 向文军 | 来源:发表于2016-05-11 15:40 被阅读792次

    最近优化项目,整理了一下如何分析第三方统计上来的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的方法也比较好,可以研究一下;

    相关文章

      网友评论

      • frank_kk:你好,请问0x4000是怎么来的?没看明白,谢谢
      • mdiep:谢谢
      • mdiep:不错

      本文标题:atos 符号化.dSYM中的bug

      本文链接:https://www.haomeiwen.com/subject/odhurttx.html