iOS xcode LLBD

2023-06-12  本文已影响0人  林希品

1. 安装 (安装工具:终端)

1.若未安装 homebrew , 则 先执行/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"安装 homebrew
2.brew update
3.brew install chisel
4.touch ~/.lldbinit
5.open ~/.lldbinit
6.将 command script import /usr/local/opt/chisel/libexec/fblldb.py 这条命令粘贴到 ~/.lldbinit 文件中
7.重启 Xcode 即可。
提示: 若重启 Xcode 后,未生效,可以将 chisel 下载到本地,并将 command script import /path/to/fblldb.py 添加到 ~/.lldbinit 文件中。/path/to/fblldb.py 替换为 fblldb.py 所在的真实路径

2.命令

pviews 循环打印,view上的所有子控件

这个命令是我最常使用的命令。它能够帮助我们看到view的层级,即使我们并没有触发到一个断点


image.png
pviews

如图我没有设置任何断点,只是点击控制台的暂停图标,就可以呼出lldb控制台了。然后再这里输出pviews这个命令。

然后这个命令主要可以看到当前的view层级,如果我们写了一个控件没有显示。我们就可以通过这个命令来排查。

排查首先看有没有我们添加的这个view,如button,如果内存地址里没有这个button,说明没有添加到view中(没调用addSubview方法)

然后可以看到这个button的地址,我们可以看到这个button的frame属性,根据属性判断是否是位置或者大小不合适。

再次,我们要看是否hidden被设置成了yes,如果设置了yes的话,在打印信息中会打印出来。因为默认view的isHidden是no,所以没被打印。

最后如果是button可以检查下是否设置了图片,如果是view,就可以查看下颜色是否与后面的控件一致,这就引入到了下一个命令border

border&unborder

image.png
border

这个命令可以直接给border 添加边框颜色和边框的宽度,使用如下:

border 0x79ec3140 -c green -w 2

border这个命令常常在我们需要查看边框的边缘的问题,常常用到,而且我们想要设置的直接在lldb中设置,完全不需要重新写代码再次运行。我就是通过直接暂停程序,并且通过pviews命令找到的控件的地址,并且调用命令显示的。当我们不需要的时候可以通过unborder这个命令去掉边框。整个过程一气呵成。

pinternals

image.png
pinternals

这个命令就是打印出来的一个控件(id)类型的内部结构,详细到令人发指!甚至是你自定义的控件中的类型,譬如这个styleView就是我自定义的,内部有个iconView的属性,其中的值它也会打印出来。好处,你们自己琢磨吧。(ps:这个demo,我会在下一篇博客中放出来,下篇博客是说transform的。

presponder

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

image
presponder

这个也方便我们了解消息是如何传递的,打印的时候是倒叙打印的。

visualize

可以使用mac下的预览app打开我们的图片UIImage, CGImageRef格式的图片,甚至view和layer的图片 。
visualize 0x79ec3140//或者变量名,此地址是id类型的

pclass

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


image

pclass

taplog

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

image

image

hide&show

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

bmessage

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

Arguments:

<expression>; Type: string; Expression to set a breakpoint on, e.g. "-[MyView setFrame:]", "+[MyView awesomeClassMethod]" or "-[0xabcd1234 setFrame:]"

pvc 打印所有控制器
pactions 0x10de0bad0 打印actions
presponder 0x10de0bad0 响应者链条
pclass 0x10dd0df80 查看类的继承关系
pmethods 0x10dd0df80 查看类的方法,不带方法的内存地址(和methods的区别)
pinternals 0x10dd0df80 查看类的属性

上一篇 下一篇

猜你喜欢

热点阅读