【iOS开发】调试时使用Instruction Pointer改变某个变量的值

316 阅读1分钟

在调试过程中,我们可能遇到这样的需求:想通过给某个变量赋不同的值,来看看应用运行的效果。

通常我们想到的办法是改变变量的值,然后重新运行应用。但这个方法很浪费时间。

其实在调试的时候,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

instruction-pointer-1

看到那个里面有三条横线的框和Thread 1: breakpoint 1.1了吗?这就是Instruction Pointer。我们可以改变这个Instruction Pointer的位置。

现在我们按住那个框,然后移动到super.viewDidLoad()这一行,Xcode会提示我们是否真的要移动,我们按确定(在开发过程中,我们要根据情况来选择移动的位置,否则可能会造成crash),在控制台输入e myName = "",按回车键,最后按左边那个箭头,继续执行代码,结果如下图:

instruction-pointer-2

我们看到控制台输出my name is empty,说明我们的e myName = "" 命令成功修改了myName的值。

合理的利用LLDB给我提供的这个特性,可以提高我们的调试效率。