美文网首页
iOS-效率提升-lldb

iOS-效率提升-lldb

作者: 笑破天 | 来源:发表于2021-08-19 21:20 被阅读0次

    1、在 LLDB 中修改 App 状态

    在 LLDB 中通过expression命令可以改变程序当前的各种状态,e、expr 作为简写也可以实现同样的功能。我们用一个简单的UILabel来举例,为myLabel设置一个值 hello , 正常来讲视图上的myLabel就应该显示 hello 。

    func test() -> Void {
        myLabel.text = "hello"
    // 断点 -> 
    }
    

    你可以在myLabel.text = "hello"这句代码后设置一个断点,运行程序执行断点后,在控制台的 LLDB 调试器 中输入下面的表达式改变它的值,在继续运行程序之后,相信你在界面上看到的值一定是 hello world 。也可以改变颜色,执行方法,调整控件frame等。

    // 改变 myLabel 文案
    e myLabel.text = "hello world"
    // 改变 myLabel 文字颜色
    e myLabel.textColor = UIColor.red
    // 执行 test 方法
    e test()
    // 调整控件frame和约束
    e myLabel.frame = CGRect(x: 100, y: 200, width: 100, height: 100)
    e myLabel.y = 20
    e self.topConstraint.updateOffset(20)
    

    2、利用断点实时插入代码

    编辑断点-action选择debugger command,可以输入你想注入的lldb命令,最后选择自动继续执行后续代码,而不会停在这一行。即可实现注入lldb代码。

    3、监听属性变化

    1、符号断点
    在 Symbol 一栏输入任何你想监听的函数比如[UILabel setText:],之后所有页面下的所有UILabel类型对象在设置text属性的时候都会执行该断点。在这个断点的控制台中,并没有显示变量属性等信息,我们怎么能知道设置了什么呢?接下来我们可以用$arg1$arg2等命令来打印出我们想要的信息。在这里$arg1是指对象本身,$arg2是对象被调用的函数,po命令无法直接输出函数名,需要加上(SEL),$arg3是被赋给text的值。
    2、watch
    在控制台找到要监听的属性,右键-watch即可。重新编译需要重新设置。

    4、查看约束调用栈

    Edit Scheme... -> Run -> Diagnostics -> Memory Management -> 勾选 Malloc Stack 并且切换至 All Allocation and Free History。重新打开Debug View Hierarchy,启动 Show Constraints。在右侧的show object inspector即可查看Backtrace

    5、修改约束

    通过po self.view.constraints或者Debug View Hierarchy中选中约束,即可拿到约束的地址,然后通过unsafeBitCast方法把地址转化为约束对象,即可实现在lldb里面设置约束

    e unsafeBitCast(0x2803db480, to: NSLayoutConstraint.self).constant = 20
    

    参考
    WWDC 2018:效率提升爆表的 Xcode 和 LLDB 调试技巧
    WWDC18 -Advanced Debugging with Xcode and LLDB

    相关文章

      网友评论

          本文标题:iOS-效率提升-lldb

          本文链接:https://www.haomeiwen.com/subject/beqibltx.html