facebook/chisel

前几天看了一篇关于LLDB的文章Dancing in the Debugger,才发现它的功能如此强大。之前只会使用po这样简单的功能,实在是浪费了LLDB在调试中所能发挥的巨大作用。Facebook有一个开源项目chisel,Github地址:chisel,对LLDB命令进一步封装,提供了一些非常方便的调试功能。

安装

按照官网提示

1
2
brew update
brew install

安装完成后提示

==> Caveats

Add the following line to ~/.lldbinit to load chisel when Xcode launches: command script import /usr/local/Cellar/chisel/1.5.0/libexec/fblldb.py

意思是需要将command script import /usr/local/Cellar/chisel/1.5.0/libexec/fblldb.py 这段代码加到./lldbinit中,这样每次LLDB启动时都会执行这段python脚本。

常用命令

pviews

可以打印view的层级

pvc

打印viewcontrroller的层级

show&hide

显示和隐藏一个指定的UIView

fv&fvc

通过类名搜索内存中存在的view和viewcontroller实例

mask/unmask

给view或者layer覆盖/移除mask

border/unborder

给view或者layer添加/去掉border

caflush

重新绘制界面,比如在控制台修改view的backgroundColor,调用caflush就可以直接看到背景色的改变

bmessage

提供打断点功能。一般我们打断点都会选择在行标上打,但比如我们想在[OneViewController viewWillAppear:]里打断点,但它并没有实现viewWillAppear:这个方法, 这时我们就可以通过

(lldb) bmessage -[OneViewController viewWillAppear:] ,这个命令会在其父类的viewWillAppear: 方法中打断点,并添加上了条件:[self isKindOfClass:[OneViewController class]]

以上就是chisel的一些常用命令,当然你也可以自定义python脚本去实现你想要的功能。