你知道 Xcode 支持设置"列断点"吗?

这里每天分享一个 iOS 的新知识,快来关注我吧

前言

Xcode 支持许多不同类型的断点,但我们最常用的是行断点。行断点可以通过单击源代码编辑器中要中断的行来设置,比如我想让程序断在第 16 行,只需要在行数上点击一下:

大多数时候能够满足我们的需求,但有时它不够精细。因此在 Xcode 13 中,苹果又增加了一种新的断点,叫列断点。

Column Breakpoints

列断点顾名思义,Xcode 允许我们在某一列打上断点,稍后会讲具体如何操作,先来看看列断点解决了什么问题。

在上图中,我们把断点设置在 16 行,这一行会执行两个函数,即:addOnedouble,默认情况下,断点会断在 addOne 函数上:

可以看到在 addOne 函数的下方有条绿色的线,这时候如果我们想让程序往下走一步,可以点击下边调试区域的 Step into 按钮:

点击一下,断点进入了 addOne 方法中:

继续点击几下这个按钮,断点会进入 double 方法中,但有的时候我们的函数表达式非常长,这样一步步操作过于繁琐,非常浪费时间,如果想直接能够断在 double 方法上,应该怎么操作呢?这时候就需要用到列断点了。

列断点的使用

从 Xcode 13 开始,我们可以直接在 double 方法上设置列断点。按住 Command 键单击该方法会显示代码操作菜单,然后点击 Create Column Breakpoint 按钮即可设置列断点:

设置列断点后,会在这个方法上看到一个小尖头,表示断点设置成功:

这时候再执行程序,可以看到程序直接断在了 double 函数上(绿色的下划线)

列断点的操作

列断点和行断点的操作几乎是一样的,可以通过双击来唤起编辑页面:

可以点击一下,禁用/启用断点,禁用之后会变成半透明浅色:

也可以通过鼠标拖拽移除。

其他的使用场景

当一行代码中有多个高阶函数时,使用列断点调试非常有效,举个例子:

bash 复制代码
let numbers = [1, 2, 3, 4]
let result = numbers.filter { $0.isMultiple(of: 2) }.map { $0 * $0 }.map { String($0) }
print(result)
// ["4", "16"]

上边的代码中,先用 filter 函数把偶数过滤出来,在用 map 函数把每个数字和自己相乘得出平方,最后再用一个 map 函数把数字结果转成字符串。

这行代码,如果想知道最后一个 map 是怎么执行的,就可以在最后一个 $0 上打上一个列断点:

然后执行程序,就可以看到,程序直接断在了 $0 上,在控制台,也可以直观的看到每次执行 $0 的情况:

这里每天分享一个 iOS 的新知识,快来关注我吧

本文同步自微信公众号 "iOS新知",每天准时分享一个新知识,这里只是同步,想要及时学到就来关注我吧!

相关推荐
職場上的造物主2 小时前
高清种子资源获取指南 | ✈️@seedlinkbot
python·ios·php·音视频·视频编解码·视频
Kevin Coding4 小时前
Flutter使用Flavor实现切换环境和多渠道打包
android·flutter·ios
wn5312 天前
【浏览器 - Mac实时调试iOS手机浏览器页面】
前端·macos·ios·智能手机·浏览器
小鹿撞出了脑震荡3 天前
Effective Objective-C 2.0 读书笔记—— 方法调配(method swizzling)
ios·objective-c·swift
小鹿撞出了脑震荡3 天前
Effective Objective-C 2.0 读书笔记—— 消息转发
ios·objective-c·swift
一丝晨光4 天前
Cocoa和Cocoa Touch是什么语言写成的?什么是Cocoa?编程语言中什么是框架?为什么苹果公司Cocoa类库有不少NS前缀?Swift编程语言?
macos·ios·objective-c·cocoa·swift·uikit·cocoa touch
jyl_sh6 天前
使用Python和Qt6创建GUI应用程序--前言
python·mvc·客户端·pyside6
LucianaiB6 天前
字节iOS面试经验分享:HTTP与网络编程
网络·ios·面试
Swift社区7 天前
LeetCode - #195 Swift 实现打印文件中的第十行
vue.js·leetcode·swift
黄油奥特曼7 天前
Flutter解决macbook M芯片Android Studio中不显示IOS真机的问题
flutter·ios·android studio·m芯片