NSLog 应该是最基本的调试方法,但是 NSLog 也有一些问题,比如
- 需要提前设置宏,在 release 版本中避免疯狂打印
- NSLog 比较耗费资源,Apple 本身设计其为打印错误日志,是对系统级打印的封装
为了避免这些问题,我们可以利用 Xcode 中的断点调试工具调试,也可以利用 lldb 断点调试,这篇我们先看看 Xcode 中的打断点吧~
调试断点,依赖于父进程和子进程之间的通信,打断点实际是在被调试的程序中,改变断点附近程序的代码,这个断点使得被调试的程序,暂时停止,然后发送信号给父进程(调试器进程),然后父进程能够得到子进程的变量和状态,达到调试的目的。
Breakpoint
打一个断点谁都会,但是除了单单打断点之外,我们还可以通过编辑这个断点,设置一些触发、过滤条件来调试代码:
Condition
设置条件断点,写一些简单的判断,使程序在满足一定条件才会停下来
Ignore
可以忽略前n次,到n+1次再停下来
Action
给断点设置一些事件,里面包含很多事件
AppleScript
AppleScript是苹果公司开发的一种脚本语言,可以用来控制运行于Mac OS上的程序,也可以写成独立运行的Applet。类似于英语,直观,易读。
我们简单设置一段AS:
Capture GPU Frame
用于OpenGL ES调试,捕获断点处GPU当前绘制帧。
Debugger Command
这个与在控制台中输入 LLDB 命令一致,输入 po + OC对象,打印这个OC对象,输入 p + 基本数据类型变量,打印这个变量。
下一篇文章我会对这个方面进行总结,敬请期待。
Log Message
在 Log Message 中输入命令,可以直接在控制台输出,有意思的是,还可以选择 Speak message ,让 siri 帮你读出这些信息。
Shell Command
在 Shell Command 中输入Shell 命令,到此断点时,会运行输入的
Shell命令。
Sound
还有一个比较好玩的 Action 是 Sound,它会在触发断点时发出响声,我们可以在一些不能时刻关注到的代码设置这个断点,运行时,发出响声提示我们一些信息。
全局断点
除了给特定代码行设置断点以外,我们还可以设置全局断点,如图:
Exception Breakpoint
异常断点在每次程序发生了异常时,都会被中断,一般用来捕获一些未知的异常,这个大家应该都比较熟悉。
Symbolic Breakpoint
符号断点可以在运行到设置的特定函数时,被中断。
讲完了 Breakpoint 的调试技巧,下一篇我们说一下 lldb 的调试方法,总的来说,Breakpoint 能做的,lldb 也能做;而 lldb 能做的,Breakpoint 可不一定能做,所以敬请期待哟😉