最近喜欢用lldb进行调试觉得非常的方便,总结一下常用的命名。
1、打印对象
po self.view
打印的内容为
<UIView: 0x7fa5b05031e0; frame = (0 0; 375 667); autoresize = W+H; layer = <CALayer: 0x600000029520>>
2、执行方法和定义变量,变量前面需要加$
(lldb) e NSString*$str = @"test"
(lldb) po $str
test
3、thread return 修改方法的返回值
- (BOOL)threadReturn {
return NO;
}
上面的方法可以打个断点,修改返回值为YES threadReturn YES
4、打印view的层级结构,并动态更新UI
打印view的层级结构
po [[[UIApplication sharedApplication] keyWindow] recursiveDescription]
打印结果如下
<UIWindow: 0x7fe63b510880; frame = (0 0; 375 667); autoresize = W+H; gestureRecognizers = <NSArray: 0x6000002447d0>; layer = <UIWindowLayer: 0x600000028000>>
| <UIView: 0x7fe63b405ee0; frame = (0 0; 375 667); autoresize = W+H; layer = <CALayer: 0x6080000266a0>>
| | <_UILayoutGuide: 0x7fe63b406290; frame = (0 0; 0 20); hidden = YES; layer = <CALayer: 0x6080000259a0>>
| | <_UILayoutGuide: 0x7fe63b406d70; frame = (0 667; 0 0); hidden = YES; layer = <CALayer: 0x608000025a80>>
| | <UIView: 0x7fe63b407440; frame = (0 0; 375 667); layer = <CALayer: 0x6080000258e0>>
| | | <UIImageView: 0x7fe63b406770; frame = (172.5 318.5; 30 30); userInteractionEnabled = NO; layer = <CALayer: 0x608000027060>>
定义一个变量myview
e id $myview = (id)0x7fe63b405ee0
改变其背景颜色
(void)[$myview setBackgroundColor:[UIColor blueColor]]
刷新一下,背景颜色发生变化
e (void)[CATransaction flush]
5、使用command alias
来重命名方法
上面是对常用的命令的总结,发现有些命名有点长,而且敲的时候没有提示。
command alias 的规则:
command alias + 自定义的方法名 + 需要执行的方法,然后把这些放在 ~/.lldbinit
中如果没有的话就touch ~/.lldbinit
在打开进行编写。
如:我们要改 e (void)[CATransaction flush] 重命名为yj_flush
command alias yj_flush e (void)[CATransaction flush]
保存并重启xcode,就能使用我们自己的方方法调用了。
6、使用command regex
来定义带参数的方法
command regex postNoti 's/(.+)/expr (void)[[NSNotificationCenter defaultCenter] postNotificationName:%1 object:nil]/'
命令 postNoti %1 用来post 一个notication如:
(lldb) postNoti @"MyNotification"
7、另外可以安装Facebook开的Chisel
安装方法如下:
brew update
brew install chisel
安装完后在~/.lldbinit
中添加.py
的路径(需根据自己的安装路径)
command script import /usr/local/opt/chisel/libexec/fblldb.py
保存,重启xcode就能用。
最后附上最部分命令的说明
如果想知道更多命令的用途可以用
help
查看
网友评论