美文网首页
iOS开发之Xcode常用调试技巧

iOS开发之Xcode常用调试技巧

作者: BigLuckyHaha | 来源:发表于2019-10-08 17:35 被阅读0次

    一、Xcode调试技巧之:NSLog

    日常的开发过程中最常见的Debug方式就是打Log。而在OC语言中,打Log是采用NSLog方法。但是NSLog效率低下。

    另外在使用NSLog的时候应当注意,release版本中应该要去掉NSLog。

    二、Xcode调试技巧之:LLDB

    1、po:print object的缩写,表示显示对象的文本描述,如果对象不存在则nil

    输出视图层级关系:po [[self view] recursiveDescription]

    2、p:可以用来打印基本数据类型

    3、call:执行一段代码

    4、expr:动态执行指定表达式

    expr i = 101

    输出:(int)$0 = 101

    5、bt:打印当前线程堆栈信息

    如果要打印所以线程堆栈信息,使用:bt all即可。

    6、image:常用来寻找栈地址对应代码位置

    三、Xcode调试技巧之:断点(Breakpoint)

    断点,程序员Debug必备技之一。

    1、条件断点

    打上断点之后,对断点进行编辑,设置相应过滤条件。下面简单的介绍一下条件设置:

    Condition:返回一个布尔值,当布尔值为真触发断点,一般里面我们可以写一个表达式。

    Ignore:忽略前N次断点,到N+1次再触发断点。

    Action:断点触发事件,分为六种:

    • AppleScript:执行脚本。

    • Capture GPU Frame:用于OpenGL ES调试,捕获断点处GPU当前绘制帧。

    • Debugger Command:和控制台中输入LLDB调试命令一致。

    • Log Message:输出自定义格式信息至控制台。

    • Shell Command:接收命令文件及相应参数列表,Shell Command是异步执行的,只有勾选“Wait until done”才会等待Shell命令执行完在执行调试。

    • Sound:断点触发时播放声音。

    这些功能平时在调试程序的过程中都可以进行尝试,说实话我用的设置Condition项会较多些。

    Options(Automatically continue after evaluating actions选项):选中后,表示断点不会终止程序的运行。

    2、异常断点

    异常断点可以快速定位不满足特定条件的异常,比如常见的数组越界,这时候很难通过异常信息定位到错误所在位置。这时候异常断点就可以发挥作用了。

    Exception:可以选择抛出异常对象类型:OC或C++。

    Break:选择断点接收的抛出异常来源是Throw还是Catch语句。

    3、符号断点

    符号断点的创建方式和异常断点一样,在符号断点中可以指定要中断执行的方法

    四、Xcode调试技巧之:EXC_BAD_ACCESS

    1、开启僵尸对象

    开启Zombie模式之后会导致内存上升,因为所以已经被释放(引用计数为0)的对象被僵尸对象取代,并未真的释放掉。这个时候再给僵尸对象发送消息,就会抛出异常,并打印出异常信息,你可以轻松的找到错误代码位置,结束Zombies时会释放。它的主要功能是检测野指针调用。

    使用方法:

    “Edit Scheme…” —> “Run” —> “Diagnostics” —> “Zombie Objects”

    2、Address Sanitizer(地址消毒剂)

    在Xcode7之后新增了AddressSanitizer工具,为调试EXC_BAD_ACCESS错误提供了便利。当程序创建变量分配一段内存时,将此内存后面的一段内存也冻结住,标识为中毒内存。程序访问到中毒内存时(访问越界),立即中断程序,抛出异常并打印异常信息。可以根据中断位置及输出的Log信息来解决错误。当然,如果变量已经释放了,它所占用的内存也会被标识为中毒内存,这个时候访问这片内存空间同样会抛出异常。

    “Edit Scheme…” —> “Run” —> “Diagnostics” —> “Zombie Objects”

    开启AddressSanitizer之后,在调试程序的过程中,如果有遇到EXC_BAD_ACCESS错误,程序则会自动中断,抛出异常。

    五、Xcode调试技巧之:View hierarchy

    xcode 6.0 以上推出的调试视图层级的工具,可视性极强,便于开发者厘清各个层级之间的关系,梳理页面视图

    1.png

    可以把view hierarchy看成翻转的树结构,window就是树的根节点,下面

    view之间的关系就是subviews和superview之间的关系。

    view hierarchy 还是Responder Chain非常重要的部分,当Responder Chain 通过responder对象将处理事件的责任传递给下一个更高级的对象,即当前responder的nextResponder的时候,如果这时需要渲染window系统就会根据view hierarchy来检测views的layer层次来判断要进行渲染的部分。

    六、Xcode调试技巧之:Analyze

    “Edit Scheme…” —> “Analyze’’

    在创建工程的时候,应该在build setting 中启用 Analyze during build。这样每次编译都会自动静态分析,写完一段代码后就能马上知道是否存在内存泄漏问题或者其他bug,并修复bug。

    七、Xcode调试技巧之:Profile

    “Edit Scheme…” —> “Profile’’

    如果想在程序运行时查看是否存在内存泄漏,可以使用instruments上的leaks模块进行内存分析

    2.png

    在proflie选项 可以选择instruments的各个模块进行调试。

    3.png

    相关文章

      网友评论

          本文标题:iOS开发之Xcode常用调试技巧

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