在调试过程中,我们可能遇到这样的需求:想通过给某个变量赋不同的值,来看看应用运行的效果。
通常我们想到的办法是改变变量的值,然后重新运行应用。但这个方法很浪费时间。
其实在调试的时候,LLDB给我们提供了一个命令,可以直接执行语句,从而改变我们想修改的变量值。这个命令是expr
,或者简写成e
。
Instruction Pointer的使用
假如我们有以下代码,想通过改变myName
的值,来看看print
的打印情况:
class ViewController: UIViewController {
var myName = "Lebron"
override func viewDidLoad() {
super.viewDidLoad()
if myName.isEmpty {
print("my name is empty")
} else{
print("my name is not empty")
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
我们在else语句的结束大括号位置加一个断点,然后运行,得到的结果如图所示,因为myName
不为空,所以打印my name is not empty
。
看到那个里面有三条横线的框和Thread 1: breakpoint 1.1
了吗?这就是Instruction Pointer。我们可以改变这个Instruction Pointer的位置。
现在我们按住那个框,然后移动到super.viewDidLoad()
这一行,Xcode会提示我们是否真的要移动,我们按确定(在开发过程中,我们要根据情况来选择移动的位置,否则可能会造成crash),在控制台输入e myName = ""
,按回车键,最后按左边那个箭头,继续执行代码,结果如下图:
我们看到控制台输出my name is empty
,说明我们的e myName = ""
命令成功修改了myName
的值。
合理的利用LLDB给我提供的这个特性,可以提高我们的调试效率。
完
欢迎加入我管理的Swift开发群:536353151
。
网友评论