0%

使用 facebook 的 chisel 来调试

介绍

chisel facebook 开源的调试框架,封装了很多方便的 LLDB 命令便于调试 iOS App,今天介绍一下使用心得以及一些常用的命令,希望对你有写帮助。

测试环境

Xcode 7.3 and iOS 9.3 simulator.
OS:OSX 10.11.4

pviews and presponder doesn’t work and no output.

Chisel issue on Xcode 7.3 #149

作者正在努力修复中…

Xcode7.2 版本没有问题

安装

brew update
brew install chisel

创建 ~/.lldbinit 假如不存在

编辑内容: command script import /usr/local/opt/chisel/libexec/fblldb.py

查看命令

(lldb)help

查看具体怎样使用

(lldb) help border

常用命令说明

Command Description
pviews Print the recursive view description for the key window.
pvc Print the recursive view controller description for the key window.
visualize Open a UIImage , CGImageRef , UIView , CALayer , NSData (of an image), UIColor , CIColor , or CGColorRef in Preview.app on your Mac.
fv Find a view in the hierarchy whose class name matches the provided regex.
fvc Find a view controller in the hierarchy whose class name matches the provided regex.
show/hide Show or hide the given view or layer. You don’t even have to continue the process to see the changes!
mask/unmask Overlay a view or layer with a transparent rectangle to visualize where it is.
border/unborder Add a border to a view or layer to visualize where it is.
caflush Flush the render server (equivalent to a “repaint” if no animations are in-flight).
bmessage Set a symbolic breakpoint on the method of a class or the method of an instance without worrying which class in the hierarchy actually implements the method.
wivar Set a watchpoint on an instance variable of an object.
presponder Print the responder chain starting from the given object.

Tips:直接点控制台上方第三个按钮呼出 LLDB

pviews(暂不可用)

显示 view 的层级。

border&unborder

border :给view或者layer添加边框颜色和边框的宽度。

使用如下:

(lldb) border 0x7ffc017b2970 -c green -w 10

标示设置 0x7ffc017b2970 视图或者图层一个宽度为 2 的绿色边框。

unborder :去掉view或者layer的边框颜色和边框宽度。

使用如下:

unborder 0x7ffc017b2970

pinternals

这个命令就是打印出来的一个控件( id )类型的内部结构。

使用如下:

pinternals 0x7ffc017b2970

presponder(暂不可用)

打印出一个继承于 UIResponder 控件的消息传递链。

visualize

可以使用 mac 下的预览 app 打开我们的图片 UIImage , CGImageRef 格式的图片,甚至 view 和 layer 的图片。

使用如下:

visualize 0x79ec3140 // 或者变量名,此地址是 id 类型的

pclass

pclass 可以打印出一个对象的继承关系。

使用如下:

pclass 0x7fcd15108800

taplog

这个命令是模拟敲击一下屏幕,并且打印出你敲击屏幕时候事件接收的对象。

hide&show

hide 命令可以直接隐藏一个对象,移除当前遮挡的对象便于你观察后面的对象。show 命令会让它再次显示出来。

bmessage

这个命令就是 LLDB 添加一个断点,譬如 -viewWillAppear: 这个方法,在当前控制器中你没有实现它,但是你又想在调用它的时机触发中断。

这个我就不解释了,需要补充一点的是 Objectiv-c 的方法是带 的。

pvc

打印出当前的控制器层级。

wivar

这个命令是加 watchPoint

参考链接: