美文网首页
Xcode7 常用的调试指南

Xcode7 常用的调试指南

作者: 冰冰大象 | 来源:发表于2016-08-04 11:16 被阅读55次

    1:po 命令:

    为 print object 的缩写,显示对象的文本描述(显示从对象的 description 消息获得的字符串信息)。例如:

    2:设置全局断点

          运行程序时如果不设置此断点 出现错误就有可能会直接跳转到main函数里,所以一定要在运行前先设置此属性

    3:设置局部断点

    如图:

    4:Address Sanitizer

    1.妈妈再也不用担心 EXC_BAD_ACCESS?

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

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

    这样设置后,如果再出现类似的错误会有更详细的错误信息提示,甚至会有内存使用情况的展示。(等我遇到EXC_BAD_ACCESS)错误时在写例子吧

    5:静态分析

    Xcode能帮我们检测代码上可能会出现的内存溢出错误:启用如图

    此时稍等XCode检测完成后如图

    于是修改完成所有错误吧

    6:查看设备崩溃日志

     直接上图

    7 使用Instruments动态分析内存泄漏

    直接上图

    但是最近测试的时候发现有很严重的内存泄露和循环引用情况发生。(/(ㄒoㄒ)/~~block用的有点乱了。)

    简直是一步三泄...

    分析了下,

    1、首先是,在block中使用成员变量的时候忘记加上

    __weaktypeof(self)weakself =self;

    导致了对象不能及时释放,造成了循环引用。(原谅我犯得小白错误/(ㄒoㄒ)/~~,后续要抓紧学习学习相关知识🐒🐒🐒)。

    2、还有就是项目中使用了AFNetworking3.0,我在这个基础上又进行了封装,封装的时候使用的方法,存在问题。(好吧,第一次尝试果然有好多坑..后续慢慢填=。 = )。

    大概是这样的,

    分析出来的泄漏点基本都跟网络部分有关,好吧看来真的是封装问题了。😢😢😢

    看了一下AFNetworking的官方demo,在网上找了点资料发现封装的时候基本使用的都是单例模式来创建AFHTTPSessionManager。而我封装的每次使用的时候都会创建一个AFHTTPSessionManager,像这样:

    好吧应该是这里的问题,接着就把请求改成了单例模式。果然改成单例模式以后内存泄露点瞬间就只剩一个了,瞬间感觉世界清晰了好多。

    改过之后:

    (可是还有一个怎么办,看到叉号和减号感觉好纠结..强迫症么这是.😭😭😭😭。好吧只有继续查哪一块出错了..)

    一查call Tree 是这个样子,当时就懵逼了...这是啥..main出错这怎么玩...

    好吧,点进去一看猜是AppDelegate里面哪个地方出错了.只好一步一步排查了..(😭😭😭)

    好吧,,最后定位在链接融云这一块,

    融云的解释是这样的:

    好吧,经过测试链接融云这一步。连接上的情况下会一直出现上面那个内存泄露点,失败或者将这部分屏蔽的时候不存在内存泄露情况。(哪位遇到过这个情况,求指教.😢😢😢)(PS. 这个问题解决了,更新成融云最新版本以后,这个内存泄露点已经解决。现在终于全绿了😂😂😂)

    努力进阶中/(ㄒoㄒ)/~~..

    相关文章

      网友评论

          本文标题:Xcode7 常用的调试指南

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