新技能Get,Xcode调试大法(断点)

普通断点调试早已经成为猿的必备技能,这里介绍几个特殊断点做为必备技能的强化。

自定义断点:

Xcode断点->右键->Edit Breakpoint… 添加自定义断点,如下图所示:

自定义断点

Condition:Action 执行的条件

Ignore:断点忽略的次数,这个对遍历或循环里的断点非常有用

Action:满足Condition执行的Action,Action类型有六种,可以同时添加多个Action(Action 后面的“+、-”号操作)。

  • AppleScript:OS X内置脚本语言,把一些重复繁琐并且耗费时间的任务自动化。
  • Capture GPU Frame: 捕获 Gpu Frame,具体用法可参考
  • Debugger Command:Debugger指令 ,调试窗口可输入指令,比如 p、po指令
  • Log Message:文本日志信息,满足Condition会在调试窗口输出填写日志信息
  • Shell Command:shell 脚本
  • Sound:和Log Message 类似的提示音,试了一下果真是用来调戏的

Options:执行完Action后是否跳过断点

异常断点 (Exception Breakpoint)

用来定位异常抛出具体位置,Xcode command + 7,打开断点列表,左下角+号添加,如下图,异常断点也可以自定义。

自定义断点

Exception:抛出异常的代码语言,有Objective-C和C++可选,默认全部。

Break:在异常抛出还是异常捕获的时候Break。

其他选项和上面自定义断点一样。

符号断点(Symbolic Breakpoint)

非常强大的调试断点,可以针对某个方法设置断点,不仅能调试自己的代码实现,还能调试系统层面实现的函数和方法。符号断点的添加方式和异常断点一样,如下图:

自定义断点

相对普通断点,多了前两项Symbol、Module

Symbol:符号,如:-[UIViewController viewDidAppear:],+[UIView commitAnimations],‘-’为实例方法,‘+’为类方法。

Module:调试模块,限制断点的范围。

还有一些其他类型的断点,OpenGL ES Error Breakpoint、Test Failure Breakpoint、Swift Error Breakpoint,不是很常用,先mark一下。