Bo2SS

Bo2SS

iOS有多少种调法?每一种都超美味!(4)

郴州砍肉粉,是兄弟就来砍


上次我们聊完了iOS 的常用 UI 组件,不知道你是否已经可以制作一些简单的 UI 界面了呢~

但是,在实践的过程中很难不遇到 BUG,或者结果很难直接符合预期,这个时候我们就需要用到调试功能了!

接下来,让我们进入从《虾票票》带你入门 iOS 系列(4)——Xcode 调试

image

⚠️:本节包含的调试技巧并不局限于 iOS 开发,应该大部分 IDE 中都包含这些功能。

甜:断点相关#

添加断点#

添加断点很简单,在代码对应行号处上单击即可;删除断点时,通过将断点标记拖出区域即可。

条件断点#

右键断点 - Edit Breakpoint,填写合适的 Condition,则运行到断点处时,只有符合 Condition 时才触发断点,暂停⏸️代码运行。

条件断点

断点处自动执行任务#

右键断点 - Edit Breakpoint,添加 Action,如 p cnt (调试命令类型),即在经过该断点时,打印 cnt 变量。

勾选下面的 Options,即可在执行上述 Action 后继续运行代码,而不暂停。

断点处自动执行任务

断点忽略#

右键断点 - Edit Breakpoint,如红框所示,则会忽略第 1 次触发断点的情况,在第 2 次触发断点时才会暂停,一般用于忽略初始化的情况。

断点忽略

异常断点#

在断点导航栏的左下方可以添加异常类型的断点。

当发生异常时,则不会导致 Crash,而是在即将 Crash 处暂停,此时可以很清晰地查看调用堆栈(详见下一小节介绍),定位 Crash 根源

异常断点

符号断点#

在断点导航栏的左下方可以添加符号类型的断点,设置 Symbol 为某种类型的方法,如 - [UIViewController viewDidLoad] ,即设置了该类方法的通用断点,而不需要在每个调用处添加断点。

符号断点

PS:参考Xcode 高级调试技巧,你知道吗?—— 简书

酸:调用堆栈查看#

进入断点时,有3 种方式查看当前的调用堆栈。

断点导航栏#

断点导航栏区域显示了所有线程以及每个线程中的方法调用堆栈,0 代表栈顶方法,即当前方法,数字大的调用数字小的。

断点导航栏

PS:上图中省略的方法 2~28 调用的是 iOS 系统底层,因为 iOS 并不是开源的,所以看不到底层的调用堆栈。

下方工具栏#

下方工具栏的项目名称处展示了与断点导航栏相同的效果。

下方工具栏

调试区域#

调试区域可以通过输入 thread backtrace 命令,以文本方式展示当前调用堆栈。

调试区域

此外,还可以通过 thread info [i] 查看线程 i 的基本信息。

PS:参考iOS 打印函数调用栈,查看变量在何处调用——CSDN

辣:3D 视图层级检查#

在使用 App 时,点击下方工具栏的红框按钮,即可查看 App 当前界面(见下图左边模拟器)的 3D 视图层级(见下图右边 3D 图)。

3D 视图层级检查

通过下方工具栏,从左至右,我们可以:调节视图层级之间的距离远近|展示被裁减的内容、展示约束、改变视图模式、改变背景|选择 2D/3D 视图|缩放|调整可视视图的范围。

视图工具栏

此外,右键某一个图层,选项如下图,点击Reveal in Debug Navigator,即可查看该图层在所有图层中的位置,方便捋清图层之间的嵌套关系。

image

总的来说,3D 视图层级检查非常适合检查 UI 问题


好了,短暂的时光总是这么短暂,这期是不是非常简短又实用呢?尤其是断点的一些高级调试技巧。

👏希望对你有所帮助,欢迎留言交流!

下周再见#

我们再来瞅瞅《虾票票》App:

虾票票 V1.0

可以看到,除了 UI 界面,它还包含这些功能:拉取网络电影数据,下拉刷新,上拉加载更多,菊花 loading 交互等等。那么这些功能是不是很难实现哇?👀

也许它们是很难实现,但这并不重要,网上有很多开源的第三方库,它们已经实现了上述功能,我们只要会拉取它们并使用即可。


这也就是我们下周要聊的内容了:CocoaPods——iOS 开发的第三方库依赖管理工具。

🎺敬请期待

——湖南降温太快了,回深圳避寒🚄

2021.10.9

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。