下午好,今天,我提请您注意有关在LLDB中调试应用程序的文章的第二部分。
在第一部分中,我们了解了如何在Xcode中使用断点来修改变量的现有属性并通过指令命令添加一行代码。
我故意创建了一个带有一些错误的演示项目,以弄清楚如何在LLDB中使用不同类型的断点来调试应用程序。
如果您没有研究本文的第一部分,则最好从本文开始。 让我提醒您一下本教程的一条重要规则:在本文结束之前,您不会停止编译器,也不会在首次启动后重新启动应用程序。 您可以在程序执行过程中更正错误。
观察点因此,应用程序中出现以下错误:
3.您可以加载帖子超过7次。如何重现错误:
- 在您的iPhone /模拟器上打开Internet
- 向下滚动到表格的末尾以加载更多帖子。
- 您可以加载帖子7次以上(尽管在此应用程序中,用户不应有这种机会)。
作为检测错误的选项之一,您需要了解在页面上加载新帖子后如何更新整数变量
pageNumber 。 由于您仍然不熟悉我的代码,因此需要花一些时间来了解代码中正在发生的事情。
不用担心 应用一些魔术。
从本文的第一部分中,我们了解到GET HTTP请求是在
实用标记“网络”部分中执行的。 它仅包含一个
loadPosts函数。 在此函数的第一行上放置一个断点,并将表格向下拖动以进行更新。 编译器将在此断点处停止。
目标c
斯威夫特在调试器的底部窗口中,单击“显示变量”按钮。 左侧将弹出一个新窗口,您将在其中看到所有变量PostsTableViewController。

将光标指向pageNumber,右键单击并分别为Objective-C和Swift选择“ Watch _pageNumber” /“ Watch pageNumber”。
目标c
斯威夫特因此,您为pageNumber变量创建了所谓的监视点。 监视点是一种断点,可以在每次将变量的值设置为更改时停止调试器。
目标c
斯威夫特继续执行程序。 调试器停止,您将看到类似以下的内容:
目标c
- 记录pageNumber变量的旧值和新值。
- 跟踪更改pageNumber变量的值的代码堆栈。
- 导致pageNumber变量更改的当前点是此变量的setter方法。
如果您参考堆栈跟踪中的步骤1,它将带您到以下代码段:
斯威夫特
- 调试器会通知您您设置的观察点已经显示出一些东西。
- 跟踪更改pageNumber变量的值的代码堆栈。
- 导致pageNumber变量更改的当前点是updateForNetworkCallEnd函数。
可以断定,每次成功执行HTTP GET请求后,
pageNumber变量都会递增1,直到
状态变量(枚举类型)处于“活动”状态。 此变量可以具有2个状态:活动(“活动”)或不活动(“非活动”)。 “活动”状态意味着用户可以加载帖子(即,尚未达到7个下载的限制)。 相反,“非活动”状态假定用户将不再能够加载帖子。 结果,我们需要向
updateForNetworkCallEnd函数添加逻辑,该逻辑将检查
pageNumber变量并将
状态变量设置为适当的状态。
您可能已经猜到了,在更改代码之前先停止假设而不停止编译器要容易得多。
我注意到在实用
标记支持部分中,我们已经有了所需的函数(
setToInactiveState ),该函数将
状态变量设置为“ inactive”。
在
if条件上方一行添加断点。 还将以下指令命令添加到调试器。
目标cexpression if (self.pageNumber >= 7) {[self setToInactiveState]}
斯威夫特 expression if (self.pageNumber >= 7) {setToInactiveState()}

之后,删除用于设置观察点的第一个断点。 同时禁用监视点本身。
目标c
目标c
斯威夫特
斯威夫特现在向上滚动表格,向下拖动以刷新并开始翻转。
一切顺利! 但是现在还为时过早,我们还有一个错误需要修复!
接下来是什么?本文的最后一部分,第三部分,我们了解了另一种类型的断点-符号断点(符号断点)。