深入了解Xcode 7——调试
做程序员,要相信bug无处不在的真理。
我们在查找bug的过程,就叫调试(debugging)。
0x01 暴力测试
暴力测试是最简单的。
在程序中写入输出语句(如printf、NSLog等)来输出程序中的控制流程和一些数据,这就是暴力测试。
对于小系统或者刚刚学习的新系统,暴力测试非常有用。
0x02 Xcode的调试器
Xcode有一个调试器(debugger)。
它可以中断程序,让我们在程序运行过程中检查程序的数据甚至修改程序,完成后可以恢复程序运行并查看结果。
它还让我们可以单步执行代码,减缓程序运行速度,细致地查看代码会如何对数据进行改动。
Xcode还有一个提供大量概述信息的调试窗口,以及一个可以直接向调试器发送调试命令的调试控制台(Console)。
0x03 开始调试
设置断点Breakpoint
断点是调试工作中必不可少的工具。
点击代码编辑区的左侧边栏,可以在当前鼠标所在行设置一个断点,Xcode用蓝色箭头标签标示。
不需要断点的话可以单击蓝色标签使它失效,也可以直接拖出边栏删掉。
运行程序
点击播放箭头,Xcode会先编译程序,如果编译通过,则显示Build Succeeded,同时程序将运行至断点处停住:
调试器操作
调试器提供了继续执行、单步执行、跳入、跳出的功能。
- 第一个按钮是调试器窗口的显示和隐藏;
- 第二个按钮是断点工具效果开关;
- 第三个按钮是继续按钮,点击后程序会继续运行直到遇见下一个断点、结束或者崩溃;
- 第四个按钮是跳过按钮,可视为单步执行;
- 第五个按钮是跳入按钮,如果程序里有当前光标所在函数或方法的源代码,Xcode将跳入并显示其代码,并将指示箭头设置在代码的起始位置;
- 第六个按钮是跳出按钮,点击它会终止当前运行的函数,同时程序会停在调用函数那行的下一行代码;
- 第七个按钮是位置模拟功能;
- 所有按钮的最右是一个线程编程控件,可以让程序员选择观察对应线程的下拉菜单。
检查程序
Xcode有强大的数据提示功能,程序调试过程中我们可以在变量或方法参数上悬停鼠标,Xcode就会弹出一个小窗口显示它的当前数值。
此时我们还可以双击弹出的数值,并修改它的当前值。
例如index目前是0,如果我们改成10,那程序多运行几个单步就会因index值超出索引范围而退出: