Swift之LLDB 高级调试

1,342 阅读2分钟

iOS 开发调试过程中, 每次改完代码之后, 都需要重新 run 起来才能看到效果, 所以非常麻烦且耗费时间, 本来开发时间就紧张, 所以我们要想尽一切办法来节省时间, 提高开发效率.

之前都是在 OC 项目中用一些高级调试, 网上文章也比较多, 在swift项目中也是试了好多次, 找了好多资料才找到的, 特意做个记录, 所以今天只谈与 swift 紧密相关的操作, 当然也很简单, 至于 LLDB 其他的高级调试技巧, 大家可自行上网搜一下, 后边会再做记录, 还请多多关注😄.

场景 和 代码

view 上有一个 label, 初始背景色为红色, 在调试过程中需要把背景色改为蓝色, 但是我又不想重新 run 项目, 此处只是模拟一个场景, 实际开发中可能不会去改颜色, 但是也不排除, 比如看别人的代码, 改个颜色来确认是不是要找的视图. 代码如下图, 比较简单就直接放了一张图. 我们在 touchesBegan 中打上断点.

image.png

调试过程

1. 查看label的内存地址并记录

  • 点击view debug按钮, 现在背景色是红色, 按下图所示找到label的内存地址并记录下来0x104c124a0, 后边要用到.

    image.png

2. 触发断点, 修改背景色

  • 放开上一步的 view debug 模式, 点击屏幕, 触发断点,然后在控制台依次输入下图中的命令.

    1. expression let $myLb = unsafeBitCast(0x104c124a0, to:UILabel.self) 自定义变量拿到label.
    2. expression $myLb.backgroundColor = .blue 将颜色改为蓝色
    3. 放开断点
    (lldb) expression let $myLb = unsafeBitCast(0x104c124a0, to:UILabel.self)
    (lldb) expression $myLb.backgroundColor = .blue
    () $R1 = {}
    (lldb) c
    

    注意: $myLb 前边的$ 符一定要有 ,这里 LLDB 自定义变量的规则.

    image.png

3. 查看修改结果

  • 我直接用 view debug 按钮给大家看执行后的结果了, 没有用手机截图. image.png