LLDB 调试 UI 的技巧

来源:互联网 发布:php获取get参数 编辑:程序博客网 时间:2024/05/17 04:15

用 LLDB 改变视图

在 iOS7 上 Xcode 并不支持捕获可视化的视图层级,我们只能用 lldb 的命令来输出视图层级

1
po [[[UIApplication sharedApplication] keyWindow] recursiveDescription]

po 是 p object 的缩写,而 p 又是 print 的缩写,print 又是 expression --的缩写。expression 就是e 命令,而 -- 代表标识的结束。上面这条命令的参数是一个全局变量,所以可以在任何时候访问,无需在特定位置加断点,只需点暂停按钮即可。

通过 e 命令,可以在调试时改变变量的值,比如某个视图的透明度、背景颜色等,还可以临时创建新的视图或者视图控制器,甚至可以完成视图控制器的 push 操作。虽然此时程序(某个进程)是被我们暂停了的,但是后台的渲染服务是由后台的另一个进程完成的,所以可以强制触发渲染服务

1
e (void)[CATransaction flush]

使用 Chisel 简化 LLDB 命令

虽然调试器也有一定的代码补全功能,但是毕竟程序员的时间是宝贵的, Xcode 的调试器毕竟还没做到 zsh 那样屌炸天,我们需要更多的“缩写”命令。Facebook 的程序员们最先按捺不住(毕竟人家做个客户端就要动辄几百号人),开发了一个基于 lldb 的工具:chisel。从此,输出视图层级只需要一条命令:pviews,输出视图控制器层级也是一条命令:pvc,刷新渲染服务更是一条命令:caflush。安装 chisel 更是简单,直接用 Homebrew 分分钟搞定,因为 Homebrew 在 OSX 上太火,有人还专门做了个带图形界面的客户端 Cakebrew,简直骚得不得了。

当然我们无需查看完整的视图层级树,pviews 后面可以附带参数,查看当前 view 为根节点下的层级树。默认不带参数就是完整打印。


0 0
原创粉丝点击