1.添加全局断点(Add Exception Breakpoint)
通过添加全局断点,可以快速定位导致程序奔溃所在的代码行。
在Xcode 中找到Breakpoint navigator(也可以通过快捷键command + 7跳转),在最下面点击加号,第一个就是:
这样就添加了一个全局断点:
程序只要一奔溃,就会触发该断点,并定位到导致奔溃所在的代码行。
2.添加符号断点(Add Symbolic Breakpoint)
Symbolic Breakpoint 是一种非常强大的断点。
如上步骤选择第二项:
添加之后在Symbol一栏输入viewDidLoad。
这样一来,在程序中所有的viewDidLoad方法被调用时都会触发断点。
当然,我们页可以仅仅为特定的某个类的方法添加断点。在Symbol一栏类输入“[ClassName viewDidLoad]”(Objective-C)或“ClassName.viewDidLoad”(Swift)即可。
3.为断点添加条件(Condition)
有时候我们可能会在某个循环中创建断点,但一次又一次地点击continue知道我们想要的条件出现,显然是一种非常低效的方式。好在Xcode为我们提供了条件断点。
首先在下列代码中插入一个普通的断点
右键点击断点,选择Edit Breakpoint,在Condition一栏输入i > 90
这样一来,只有当程序运行满足条件之后才会触发断点了。
4.监控断点(Watch)
我们调试程序的大部分时候都是为了监控某个变量的变化,在代码中变量出现的地方添加断点不仅累而且还可能漏掉,事后还得一个一个删掉,实在很累。
我们可以通过为变量添加监控断点来简单地做到这一点。
找到变量第一次出现的地方,添加一个普通断点,进入debug模式后在Variables View中右键变量,选择Watch变量名。这样每一次该变量都会触发断点告知我们。
我们可以在Console中看到其变化。
5.日志信息断点
最常见的Debug方式应该就是NSLog或者println(swift)了。通常我们会通过这种方式来打印输出各种实例信息以检测程序运行状态。
但这一调试方式也有很明显的缺陷:
- 无法在运行时添加
- 添加数量过多之后干扰视线,又需要麻烦地删除或注释掉
- 会编译进App,在正式版本中需要关闭(当然我们可以通过宏来判断是否应该编译,但这会增加额外的操作不是吗)
所幸在Xcode中我们还有另外一种选项。
在如下代码中添加一个普通断点,选择Edit Breakpoint,然后点击Add Action,选择Log Message,在输入框中输入 The number is:@[email protected]。
运行效果如下图所示:
这里因为有日志输出,所以我们可以勾选上最下面的Automatically continue after evaluating actions,这样这个断点就只会安安静静为我们输出日志了。