美文网首页iOS开发iOS工作系列iOS Developer - Tips
Xcode7中你一定要知道的炸裂调试神技

Xcode7中你一定要知道的炸裂调试神技

作者: 没故事的卓同学 | 来源:发表于2015-10-16 00:46 被阅读25159次

    Xcode7中苹果为我们增加了两个重要的debug相关功能。了解之后觉得非常实用,介绍给大家。

    1.Address Sanitizer: 妈妈再也不用担心 EXC_BAD_ACCESS 

    EXC_BAD_ACCESS一直是很多开发者的噩梦,因为这个错误很不直观,出现后往往要花很长时间才能定位到错误。苹果这次带来了革命性的提升。

    在项目的Scheme中Diagnostics下,选中enable address sanitizer(注意选中后Xcode会重新编译整个项目)。

    这样设置后,如果再出现类似的错误会有更详细的错误信息提示,甚至会有内存使用情况的展示。

    2.发布后的crash跟踪,轻松定位崩溃代码

    在升级iOS9后,苹果会询问用户是否同意收集应用崩溃报告。这样在itunes connect的后台统计中就可以看到一些收集到的数据(通常会有相当一部分用户不同意,所以只是部分数据)。

    2.1查看崩溃统计信息

    在connect后台中选择app分析

    进入分析页面后,tab中选择“指标”

    然后在左侧的菜单中选择“崩溃”

    这样就可以看到苹果收集到的崩溃统计,一定要注意这里只是一部分的数据,举例来说如果你看到的崩溃是10次,但是可能苹果只收集了20%的用户信息。所以你可以大概估计应该是10*5=50次崩溃。

    2.2在Xcode中查看具体崩溃信息

    在xcode中菜单的window下选择organizer,在打开的窗口中选择Crashes,这样Xcode会开始下载相关的崩溃信息到本地中(网络环境不好时可能要等待一些时间)。

    organizer窗口

    可以在左侧选择你要查看崩溃信息的发布版本

    在崩溃信息这一栏苹果会按照崩溃数量排序,将崩溃数量最多的排在最前。右侧的详细信息会显示是崩溃时的调用堆栈,可以看到是哪行代码导致的崩溃。

    选中要解决的崩溃后,可以在窗口右侧选择open in project。

    神奇的事情发生了!!!在打开的项目中,会直接定位到崩溃的那行代码。这大大提高了调试的效率!我已经的迫不及待要和开发安卓的同事分享这份喜悦了。

    注意!注意!

    因为之前的项目发布时没有用xcode7打包,所以猜测符号表可能没有上传到苹果服务器,所以以前的项目可能不能直接显示是哪行代码,而是显示调用时出错的内存地址。不过下个版本你用xcode发布后就可以正常看到啦。

    在解决完这个crash后可以标记为已经解决。有两个地方可以标记。

    所以没有升级xcode7的同学赶紧升吧。O(∩_∩)O~

    欢迎关注我的微博:@没故事的卓同学

    相关链接

    what's new in Xcode

    相关文章

      网友评论

      • sun_dev:你好,我这里打开了这两个选项后,进行真机调试,应用启动就会crash,关掉就可以正常运行。是为什么? 如果开启两个选项,出现crash 该如何定位相关代码,错误原因?
      • 铃兰_900f:感谢分享。都很实用。待我挨个使用~
      • 米苏芊:下载Crashes一直下不到,提示没有crashes。有人有解决方案么?谢谢
      • 405a4e4fb4b0:非常棒
      • Damon4Zhou:对写c和c++的比较实用 赞一个
      • 唤灵者:才发现作者是投稿到本人创建的专题里了。不胜荣幸,感激涕零!
      • SacredBillows:非常感谢楼主分享
      • OCSwift:必须好好看
      • 832149a3d2c0:好文章啊
      • 甜行僧:bad access
      • 甜行僧:必须实用,再也不用担心bad excess
      • 37f93aa2e25e:nice!
      • e5ab10040599:我在xcode7定位崩溃的时候,点击open in project无法定位到崩溃是哪行代码,这是为什么呢?请指教,谢谢!
        没故事的卓同学:@沉睡的猿 可能你的项目有改动了,或者已经发布的版本不是用xcode7上传的
      • davon:mark
      • 1658466bc0dc:好屌,第三方的崩溃收集可以退休了
      • 34ee60f3acca:感谢分享。都很实用。待我挨个使用~
      • liuyan3176:enable zombie object是什么意思?
        需要勾选吗
        没故事的卓同学:@liuyan3176 非必需。
      • ea65cb40d75e:👶🏿😋
      • 952625a28d0d:以前莫名崩溃太痛苦了,给作者赞一个
      • leeyyl:很实用的技巧
      • 十一岁的加重:这么强悍的Xcode7啊
      • 958645c161f4:试了一下,address sanitizer开启之后,项目有用到 CocoaPods,运行到真机(iPhone5S,8.3)上,和模拟器(9.0)上都是好的,并没有崩溃和出错
      • Shumin_Wu:学习了
      • 奔奔奔跑:用于有这个了,看到的时候情不自禁的说了句“卧槽”!EXC_…
      • 89459e326014:牛逼牛逼
      • 小白菜_TH:学习了
      • 木子小静:太棒了,给个赞
      • 4de97f4b3a77:用了address sanitizer 之后报了这个错误 heap-buffer-overflow, 堆区溢出,求解
        没故事的卓同学:@怪小智 我自己试用了后发现uiwebview在ios7下也会报这个错。关掉后就好了。苹果现在推荐用wkwebview了。
        4de97f4b3a77:@卓同学 谢了
        没故事的卓同学:@怪小智 可能和你的项目配置有关,你可以看看这个回答。
        http://stackoverflow.com/questions/17359624/is-anyone-get-address-sanitizer-known-as-asan-or-fsanitize-address-work-for-i/17380264#17380264
      • Eggman:address sanitizer 这个在真机会crash…项目有用cocoapod
        HWenj:遇到同样的问题, 有解决方法没有啊?
        Eggman:@怪小智 不确定呢,不过模拟器没事,但并没有定位到问题代码。
        4de97f4b3a77:@Eggman 是因为cocoapods才crash的吗?

      本文标题:Xcode7中你一定要知道的炸裂调试神技

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