Swift:LLDB调试

Swift:LLDB调试

1、expression

修改简单的逻辑


当我们需要调测一小块变量,并且需要修改部分参数为指定值,一般的操作都是在代码中手动修改。那么如何在不用重新运行项目的情况下修改,这就需要使用 expresion 了

1.1 expresion有两种使用方式

  • 在LLDB中输入:每次都要输入
expression 参数 = 指定值
po 参数
  • 在断点中配置:只需要输入一次
    1)右键选中 Edit Breakpoint

    2)点击 anction

    3)在下图标识的1中输入需要制定的参数的指,例如:count = 4,并勾选上图中2的选项

    注:编辑过的断点会在箭头内部添加一个白色三角形

2、thread jump

跳过不想执行的语句

当我们想跳过一行代码时,可以使用thread jump,但是使用时,xcode会弹出一个警告框,告知我们这种做法很危险,所以,需要谨慎使用!要确保不会出现问题时再使用

*使用

// 跳过1行,可以修改成任意想要的数字
thread jump --by 1 

3、recurisiveDescription

通过Debug修改UI


在日常开发中,会经常微调一些UI界面的样式等,每次修改都需要再重新编译运行是非常耗时的,所以可以通过LLDB来实现并改善不运行即可看见效果


例如,如果想修改self.view中某个子控件的位置

  • 使用命令打印出self.view的所有子控件的详细信息
//格式:expression -l objc -O -- <expr>
// - 打印self.view 的子视图
expression -l objc -O -- [`self.view` recursiveDescription]
  • 拿到需要修改控件的内存地址后,用命令修改子控件的frame
//格式: unsafeBitCast(point, to: type)
//第一个参数为子控件的内存地址,第二个参数为子控件的类型。

// - 将一个UIButton的实例的x赋值为100
expression unsafeBitCast(0x7fa94cb015c0, to: UIButton.self).frame.origin.x = 100

  • 修改内存地址后,通过命令刷新暂存区,看见实际的效果
//刷新暂缓区 
expression CATransaction.flush()

4 设置命令别名

每次输入的命令比较长,可以设置别名来使用

//设置别名
commend alias 别名 原命令
//这样就可以使用 flush 来代替 expression CATransaction.flush()
command alias flush expression -l objc -- (void)[CATransaction flush]

猜你喜欢

转载自blog.csdn.net/lin1109221208/article/details/106786065