当我刚开始成为一名 iOS 开发者的时候, 我最大的问题是: 当应用崩溃时, 我真的不知道 iOS Swift Objective-C 都是如何工作的那时候, 我写了很多烂代码, 从不担心内存使用内存访问 ARC (译者注: Automatic Reference Counting ) 那仅仅是因为我不知道那些事情看在上帝的份上, 我是个菜鸟
就像许多新手一样, Stack Overflow 社区教会我许多关于如何做正确的事情的方法我学到了许多帮助提升工作过程的窍门在这篇文章中, 我将分享在这一阶段过程中最重要的一些工具, 那就是断点!
那么, 撸起袖子干起来吧
断点
毫无疑问, Xcode 断点是一个强大的工具其主要目的是调试代码, 但是如果我说他们还要更多作用呢? OK, 那我们从一些窍门开始吧
Conditioning breakpoints 条件断点
也许你已经陷入了这样一种困境: 你的 TableView 对于所有用户 model 都运行良好, 可就是有那么一个引起来一些麻烦为了调试这个实例, 首先你可能会想: Ok , 我会在 cell 装载的地方打个断点看看什么情况但是对于每个 cell , 甚至是暂时正常的那些, 你的断点都会被激活, 你不得不不停跳过直到你抵达你想要调试的那个
为了解决这些问题, 你可以继续然后给断点设置一个停止的条件, 就像我对用户 Charlinho 做的那样
Symbolic Breakpoints 标志断点
放轻松, 我会用 pod , 那应该会给我们省点工作量
谁都无法保证永远不会说这句话但是使用 pod 或者一个外部库意味着你向你的工程引入了外部代码并且也许你并不知道它是怎么写出来的比如说你发现在 pod 内部一堆方法里存在一个错误, 但是你不知道这个方法在哪里做个深呼吸, 保持冷静你有 **Symbolic Breakpoints**.
当事先声明的 标志 被唤醒, 这些断点会被激活 标志 可以是任何非成员函数实例类方法, 是否在你的类里都可以因此在函数中加一个断点, 无论谁唤醒它, 你只要加一个 Symbolic Breakpoint 来观察你想要调试的函数在我下面的样例中, 我观察 UIViewAlertForUnsatisfiableConstraints 方法每当 Xcode 发现 Autolayout 问题的时候, 这个方法都会被唤醒你可以看在这篇博文看一个更深入的例子
Customizing breakpoints 自定义断点
像我之前说的, 断点是一个强大的工具你知道吗? 你甚至可以在端点上自定义动作是的, 你可以这么做! 你可以运行 AppleScript , 捕获 CPU 框架, 使用 LLDB ( Low-level Debugger , XCode 内置的调试工具) 命令, 甚至 shell 命令
你只需要简单地点击右边的按钮, 选择 edit breakpoint
好了, 你看会想: 酷! 但是为什么要这么做?
我会给你一个很好的使用案例来帮助你的理解一个 APP 中最常见的功能是登录, 有时候测试它有点无聊如果你正在同时使用管理员账号和普通账号, 你需要不停地输入用户和密码, 会让这个过程变得难以忍受一般的自动化登录页面的方法是创建一个 模拟 实例, 并把它应用于 if debug 分句像这样:
struct TestCredentials {
static let username = "robo1"
static let password = "xxxxxx"
}
private func fillDebugData() {
self.userNameTxtField.text = TestCredentials.username
self.passwordTxtField.text = TestCredentials.password
}
但是你可以用断点来让事情变得简单一点!
进入登录页面, 加一个断点, 然后加了两个填写账号密码的 LLDB 表达式像我下面的例子一样:
考虑到这一点, 你可以加两个不同身份的断点你只要生效 / 失效你想要测试的那个, 就可以在两个身份间切换了一旦你在运行中切换用户, 也不需要重新构建
很酷, 不是吗?
COMBO BREAKER!
在我写这篇文章的时候, WWDC 2017 正在举行他们发布了一些例如新版 Xcode 9 这样的酷炫家伙如果你想知道在 Xcode 9 中有哪些新的调试工具, 我强烈推荐看 Session 404
这就是全部内容了! 现在你知道了一些在我还是新手的时候帮助巨大的最基础的断点窍门还有哪些我没有提到的酷炫窍门呢? 你也有好的主意? 请在评论区随意讨论!
掘金翻译计划 是一个翻译优质互联网技术文章的社区, 文章来源为 掘金 上的英文分享文章内容覆盖 AndroidiOS 前端后端区块链产品设计人工智能等领域, 想要查看更多优质译文请持续关注 掘金翻译计划官方微博知乎专栏
来源: https://juejin.im/post/5a72be42518825733b0f374e