前言

刚做完了这个Advanced Debugging with Xcode and LLDB Session 412的听力练习,来写个小总结(嗯,又可以愉快的开始装逼了)。
由于Swift写的不多,可能有几个小部分了解的并不是很全面

增加了Swift Debug的可靠性

Swift第三方库导入方式不正确,导致的属性无法打印问题修正

产生原因可以直接看这个链接
实际产生的效果
IMAGE

控制台Swift类型修正

IMAGE

Debug技巧

之前看了会儿Advanced Apple Debugging这本书,其实好像上面很多都有写。

多一个工作区的Debug Tab给开发者来调试

当你进入Debug的时候会多出一个Tab来,当然这个并不是默认打开的,你可以去设置里面进行打开
IMAGE
IMAGE
Xcode提供了很多选项可供你选择,在Build/Test/Run等的场景开始或者是暂停的时候弹出新的Tab,可定制型还是挺高的。

Expression交换函数结果

利用expression命令,简写为e,来修改属性的值
IMAGE
当然如果你不想每次运行的时候都这么来敲一遍的话,你可以这么玩
IMAGE
OK,甚至你忘记写某句代码了,但是编译又贼慢,你可以学习一下视频里的这个操作
IMAGE
图中他少设置了一个Delegate,但是他懒啊,直接用断点添加上,然后假装写一行代码在那(其实他并没有编译咯)。但是这样可以假装写了一个代理赋值。Amazing?

breakpoint set –one-shot true

OK,看到这个命令一开始是懵逼的,什么鬼东西。但是看到下图应该并不会很陌生,这个是对于UILabel的text字段的全局断点,但是系统的所有设置都会起作用。所以调试的时候还要开关断点啊什么的太麻烦了。所以可以利用上面的这个命令来进行一个修正优化。
IMAGE
我想要在if的判断后面拦截一次-[UILabel setText:]我就可以这么做了
IMAGE
IMAGE

Note: 这边写了one shot 所以我在想有没有断两次的操作,但是在同一个断点设置两次command是没有起作用的。
–name只是这个命令的其中一个用法,还有其他用法大家自己探索

断点移动

ヾ(。`Д´。)我擦这是什么操作?来段Gif来表达一下我的忧伤,恕我年少无知。
未命名.gif
!!!运行中的断点竟然还能移动,关键是还能够回退执行。OK,回到正题,这应该是之前就有的吧,我只是不知道而已。视频中介绍了另外一种姿势,我们来学习一下。图中,这句jump的动画被泰国了,执行了手动执行的动画,并且为false。
IMAGE

watch point 属性的监听

OK,这就像是运行期的KVO 中set炒作一样理解就OK了。
当我们在属性列表里面Watch了之后,就可以捕获到这个属性的变化了
IMAGE
IMAGE

老生常谈的Swift调用OC

在用Swift的时候,有些OC函数是无法在LLDB中使用的。like view.recursiveDescription。

1
expression -l objc -O -- <expr>

IMAGE

断点中,界面刷新

有时候我们进入了断点,在断点的时候,修改了Frame,但是因为被暂停UI是不会刷新的,所以我们可以手动去调用刷新expression CATransaction.flush()已达到界面刷新的效果

别名

这个没什么好讲的吧,给刚才的命令取一个简短的名字方便调用罢了

1
2
command alias poc expression -l objc -O --
command alias 🚽 expression -l objc -- (void)[CATransaction flush]

(用🚽来刷新也是骚的)

用LLDB-Python库来自定义命令

这部分还是参考别人的文章看看吧LLDB调试器使用简介,反正以前就有了。

Xib的约束拷贝

断点的时候进入ViewDebug可以点击相关约束后进行拷贝。在命令行进行粘贴,这样你就能拿到约束对象的地址,进行调试。改完之后要记得刷新界面哦~
IMAGE
IMAGE

其他

剩下的是dark mode和color的东西,并不是很有兴趣,自行观赏

总结

这些都只是入门操作,进阶入门更多的这本书里面写的更详细一点吧。
这些都是提高自己工作效率的东西,但是关键还是在于理解和实战,只有配合好了才能够发挥出最大的效益。单单只有了解就只是个装饰品罢了。