Xcode 调试之 Breakpoint

NSLog 应该是最基本的调试方法,但是 NSLog 也有一些问题,比如

  • 需要提前设置宏,在 release 版本中避免疯狂打印
  • NSLog 比较耗费资源,Apple 本身设计其为打印错误日志,是对系统级打印的封装

为了避免这些问题,我们可以利用 Xcode 中的断点调试工具调试,也可以利用 lldb 断点调试,这篇我们先看看 Xcode 中的打断点吧~

调试断点,依赖于父进程和子进程之间的通信,打断点实际是在被调试的程序中,改变断点附近程序的代码,这个断点使得被调试的程序,暂时停止,然后发送信号给父进程(调试器进程),然后父进程能够得到子进程的变量和状态,达到调试的目的。

Breakpoint

打一个断点谁都会,但是除了单单打断点之外,我们还可以通过编辑这个断点,设置一些触发、过滤条件来调试代码:

Xcode 调试之 Breakpoint_第1张图片
编辑 Breakpoint
Condition

设置条件断点,写一些简单的判断,使程序在满足一定条件才会停下来

Ignore

可以忽略前n次,到n+1次再停下来

Action

给断点设置一些事件,里面包含很多事件


Xcode 调试之 Breakpoint_第2张图片
Breakpoint 中的 Action 选项
AppleScript

AppleScript是苹果公司开发的一种脚本语言,可以用来控制运行于Mac OS上的程序,也可以写成独立运行的Applet。类似于英语,直观,易读。
我们简单设置一段AS:


Xcode 调试之 Breakpoint_第3张图片
在运行到断点时,在当前应用输出 Hello World!
Xcode 调试之 Breakpoint_第4张图片
停下时,Xcode 弹出 Hello World!
Capture GPU Frame

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

Debugger Command

这个与在控制台中输入 LLDB 命令一致,输入 po + OC对象,打印这个OC对象,输入 p + 基本数据类型变量,打印这个变量。
下一篇文章我会对这个方面进行总结,敬请期待。

Log Message

在 Log Message 中输入命令,可以直接在控制台输出,有意思的是,还可以选择 Speak message ,让 siri 帮你读出这些信息。


Xcode 调试之 Breakpoint_第5张图片
LogMessage 打印信息
Shell Command

在 Shell Command 中输入Shell 命令,到此断点时,会运行输入的
Shell命令。

Xcode 调试之 Breakpoint_第6张图片
输入ls,列出当前目录下文件
Sound

还有一个比较好玩的 Action 是 Sound,它会在触发断点时发出响声,我们可以在一些不能时刻关注到的代码设置这个断点,运行时,发出响声提示我们一些信息。

Xcode 调试之 Breakpoint_第7张图片
设置当前如果断网了,"叮"一声

全局断点

除了给特定代码行设置断点以外,我们还可以设置全局断点,如图:

Xcode 调试之 Breakpoint_第8张图片
全局断点
Exception Breakpoint

异常断点在每次程序发生了异常时,都会被中断,一般用来捕获一些未知的异常,这个大家应该都比较熟悉。

Symbolic Breakpoint

符号断点可以在运行到设置的特定函数时,被中断。

Xcode 调试之 Breakpoint_第9张图片
设置Symbolic 为viewWillAppear:就会在所有控制器调用viewWillAppear时中断

讲完了 Breakpoint 的调试技巧,下一篇我们说一下 lldb 的调试方法,总的来说,Breakpoint 能做的,lldb 也能做;而 lldb 能做的,Breakpoint 可不一定能做,所以敬请期待哟

你可能感兴趣的:(Xcode 调试之 Breakpoint)