- 原文地址:Xcode and LLDB Advanced Debugging Tutorial: Part 2
- 原文做者:Fady Derias
- 译文出自:掘金翻译计划
- 本文永久连接:github.com/xitu/gold-m…
- 译者:kirinzer
- 校对者:iWeslie, JasonWu1111
在三部分教程的第一部分,咱们介绍了如何利用 Xcode 断点操做现有的属性值,以及使用表达式语句注入新代码。前端
我特意开发了一个带有几个错误的演示项目,详细说明了如何使用不一样类型的断点配合 LLDB 来修复项目/应用程序中的错误。android
在继续阅读本文以前,最好先看过本教程的 第一部分。ios
让我提醒一下你,本教程的重要规则是: 第一次运行应用程序后,你没必要中止编译器或从新运行应用程序,你会在运行时修复这些错误。git
让咱们向下一个敌人进军。github
- 用户能够加载文章 超过 7 次。
这里有复现这个错误的步骤:express
✦ 打开手机或模拟器的网络链接。后端
✦ 滚动到表视图的底部,加载更多数据。xcode
✦ 滚动加载更多文章的次数超过 7 次。(记住,对于当前的应用程序,用户只能加载文章 7 次)bash
考虑这个错误的一个方法是弄清 pageNumber
这个整形属性自从它被传入到网络管理器,去取回指定页码的新文章对象后是怎样被改变的。你将会花费一些时间和精力在你还不清楚的代码库里,而且弄清这个错误发生在哪里。markdown
不要担忧!如今让咱们作一些神奇的事 🎩
在这个教程的第一部分,你了解到 GET HTTP 请求发生在用 pragma mark Networking
标记的部分。那里只有一个方法 loadPosts
。在这个方法的第一行放置一个断点,而后下拉刷新,加载新的文章对象。这个动做会触发你刚才设置的断点。
在底部的调试器窗口,点击“展现变量视图按钮”。接着就会滑出一个包含了 PostsTableViewController 全部属性的视图。
找到 pageNumber
属性,右键单击,选择 “Watch _pageNumber” / “Watch pageNumber”。
这会为 pageNumber
属性建立一个叫作“观察点”的断点。观察点是一种断点,当下一次观察的属性有变化的时候它会暂停调试器。
继续执行程序。调试器将会暂停,你将会看到一些相似下图的东西:
pageNumber
属性旧值和新值的日志。
致使 pageNumber
属性发生变化的方法调用栈。
致使pageNumber
属性实际发生改变的当前点。这是属性的 setter 方法。
若是你回到方法调用栈的第一个点,它将会引导你找到如下的代码:
调试器控制台通知你,所设置的观察点被触发。
致使 pageNumber
属性发生变化的方法调用栈。
致使 pageNumber
属性实际发生改变的当前点。这是一个叫 updateForNetworkCallEnd
的方法。
很显然每当 HTTP GET 请求成功时,只要 state
枚举属性处于 active 状态,pageNumber
属性就会加 1。state
枚举属性能够是 “active” 或者 “inactive”。“active” 状态是指,用户能够继续加载更多文章(就是说没有达到上限数字)。“inactive” 状态则与之相反。结论是,咱们须要在 updateForNetworkCallEnd
内部实现一些逻辑,能够检查 pageNumber
属性,并设置相应的 state
枚举属性。
正如你以前所学到的,最好的方式是在不中止编译器的状况下,先测试一下假设,而后再去实际的修改代码。
你猜对了 😉
重要的是,在 pragma mark Support
下面已经有了一个实现好的方法,能够设置 state
枚举属性。这个方法是 setToInactiveState
。
在条件语句上一行添加一个断点。接着添加一个调试器动做,而后填写以下的调试器命令。
expression if (self.pageNumber >= 7) {[self setToInactiveState]} 复制代码
expression if (self.pageNumber >= 7) {setToInactiveState()} 复制代码
作完这些以后,你须要停用以前设置观察点的断点,同时也停用了观察点。
如今回到表视图顶部,下拉刷新,接着向下滚动。
不要高兴的太早,咱们还有一个大问题要解决 😄⚔️
查看 第三部分 教程修复了最后的错误,并学习一种新的断点类型,符号断点。
若是发现译文存在错误或其余须要改进的地方,欢迎到 掘金翻译计划 对译文进行修改并 PR,也可得到相应奖励积分。文章开头的 本文永久连接 即为本文在 GitHub 上的 MarkDown 连接。
掘金翻译计划 是一个翻译优质互联网技术文章的社区,文章来源为 掘金 上的英文分享文章。内容覆盖 Android、iOS、前端、后端、区块链、产品、设计、人工智能等领域,想要查看更多优质译文请持续关注 掘金翻译计划、官方微博、知乎专栏。