最近看看针对LLDB命令扩展的Chisel,感觉很实用。记录下,备份
对于只会po
的我感觉打开新世界的大门。。。😝
仓库地址
Chisel
下面基本就是readme翻译和我实践记录了😂
安装
brew update
brew install chisel
在~
路径下创建.lldbinit
文件
touch .lldbinit
open .lldbinit
输入命令
command script import /usr/local/opt/chisel/libexec/fblldb.py
使用
1 pviews
<UIWindow: 0x7fcbb0b1b360; frame = (0 0; 375 812); gestureRecognizers = <NSArray: 0x60400005cd40>; layer = <UIWindowLayer: 0x60400003ba20>>
| <UIView: 0x7fcbb0a05040; frame = (0 0; 375 812); autoresize = W+H; layer = <CALayer: 0x608000036a20>>
| | <UIImageView: 0x7fcbb0a05220; frame = (67 170; 240 128); autoresize = RM+BM; userInteractionEnabled = NO; layer = <CALayer: 0x608000037100>>
查看层级视图。感觉这个不如XCode自带的debug view hierarchy直接。但是也不错
2 pvs
打印当前VC描述
感觉 可能 用不到
(lldb) pvc
<ChiselTest.ViewController 0x7fcbb0b1aa30>, state: appeared, view: <UIView 0x7fcbb0a05040>
3 visualize
查看image相关 view
感觉这个是神器,不过swift4报错..待填坑
看到有人提issue,也没回应
issue
4 fv
应该 find views的缩写吧
参数是正则
(lldb) fv UIView
0x7fc232703d20 UIView
0x7fc23240dc70 UIView
(lldb) fv UIVie+
0x7fc232703d20 UIView
0x7fc23240dc70 UIView
(lldb)
5 fvc
同 find vcs
6 show/hidden
查看隐藏视图
感觉这个也是在debug view hierarchy中的功能
(lldb) hide 0x7fc23240dc70
(lldb) show 0x7fc23240dc70
7 mask/unmask
在当前视图遮罩
(lldb) mask 0x7fc23240dc70
(lldb) unmask 0x7fc23240dc70
感觉就是addSubview/SubLayer
image.png
8 border/unborder
给视图加一个边框实现
(lldb) border 0x7fbefdc00f00
(lldb)
感觉这个不错
9 caflush
刷新渲染服务器(如果没有动画,就相当于“重新绘制”)。
感觉 用不到 没有使用场景
caflush
10 bmessage
在类的方法或实例的方法上设置一个符号断点,而不用担心层次结构中的哪个类实际实现了这个方法。
神器神器 我们自定义的方法中可以打断点。系统实现的方法就懵逼啊
(lldb) bmessage [0x7fcc17c15fc0 setFrame:]
Setting a breakpoint at -[UIView setFrame:] with condition (void*)(id)$rdi == 0x00007fcc17c15fc0
Breakpoint 2: where = UIKit`-[UIView(Geometry) setFrame:], address = 0x000000010e2d44f2
1
image.png
11wivar
watch ivar 观察变量
貌似swift4 不行
error: error: use of undeclared identifier 'aa'
Traceback (most recent call last):
File "/usr/local/opt/chisel/libexec/fblldb.py", line 84, in runCommand
command.run(args, options)
File "/usr/local/Cellar/chisel/1.8.0/libexec/commands/FBDebugCommands.py", line 40, in run
objectAddress = int(fb.evaluateObjectExpression(commandForObject), 0)
TypeError: int() can't convert non-string with explicit base
12 presponder
打印链式的起点
感觉也nice
13 help
查看所有命令
网友评论