b612咔叽鸿蒙版
217.26M · 2025-10-31
对于iOS开发者,Xcode是我们最常用的开发工具。能够熟悉Xcode工具的常用界面元素以及常用快捷键和常用调试方式,对于高效开发非常重要,往往可以让我们事半功倍。然而由于这些知识点非常琐碎,所以在使用时往往会忘,常常需要查来查去,本文特意做了归纳总结,希望帮助每个iOS开发者码code如飞!
Xcode页面主要分为以下五个部分:
详细功能分别为:
上图从左到右分别为:
| 作用 | 快捷键组合 |
|---|---|
| 隐藏/显示 左边项目导航页面 | Command + 0 |
| 隐藏/显示 下面项目Debug区域 | Command + Shift + Y |
| 隐藏/显示 右边工具栏 | Command + Option + 0 |
| 作用 | 快捷键组合 |
|---|---|
| 截取当前整个屏幕到文件 | Command + Shift + 3 |
| 截取当前屏幕到剪贴板 | Command + Shift + Control + 3 |
| 截取所选屏幕区域到文件 | Command + Shift + 4 |
| 截取所选屏幕区域到剪贴板 | Command + Shift + Control + 4 |
| 作用 | 快捷键组合 |
|---|---|
| 在当前工程中创建一个新文件(一般包括.h 和 .m文件) | Command + N |
| 在当前工程中创建一个新工程 | Command + Shift + N |
| 在工程中关闭当前正在屏幕中显示的文件 | Command + W |
| 最小化xcode编译器窗口 | Command + M |
| 作用 | 快捷键组合 |
|---|---|
| 编译并运行 | Command + R |
| 编译 | Command + B |
| 强制退出 | Command + Q |
| 停止运行 | Command + . |
| 继续(到下一个断点,如果没有则执行到结束) | Command + Control + Y |
| 单步调试 | F6 |
| 跳入某函数 | F7 |
| 跳出某函数 | F8 |
| 添加/删除断点 | Command + (光标必须在指定的行) |
| 静态代码分析 | Command + Shift + B |
新版的Mac,如果匹配了触摸栏,在进行单步调试时需要现将先将F1、F2等功能键设置出来。步骤:打开 “系统偏好设置” ,点击 “键盘” 选项,在 “触控栏显示”一栏中选择为“F1、F2等键”
如果不进行以上设置,则需要按着键盘左下角的 「fn」键,就可以看到触控栏上显示出 F1 等键了。
| 作用 | 快捷键组合 |
|---|---|
| 左缩进 | Command + [ |
| 右缩进 | Command + ] |
| 当前文件搜索 | Command + F |
| 当前文件文本替换 | Command + Option + F |
| 全局检索快捷键 | Command + Shift + F |
| 全局文本替换 | Command + Shift + Option + F |
| 搜索下一处 | Command + G |
| 搜索上一处 | Command + Shift + G |
| 快速跳到当前类的指定行 | Command + L |
| 快速查找打开某个类 | Command + Shift + O |
| 代码折叠与打开 | Command + Option + ⬅️ 或 ➡️ 光标需放在方法里 |
| 当前文件修改局部变量快捷键 | Command + Control + E (必须光标在一个变量上面) |
| 格式化代码 | Control + I |
| 将代码所在文件定位到左边项目导航器中 | Command + Shift + J |
| 程序中 .h 和 .m 文件间快速切换 | Command + Control + ⬆️ 或 ⬇️ |
| go Back 或 go Forward | Command + Control + ⬅️ 或 ➡️ |
| 去本行代码的行首 或 行尾 | Command + ⬅️ 或 ➡️ |
| 当前行上移或者下移 | Command + Option + ] / [ |
总体来看,关于Xcode基本的调试方法包括有以下几个部分:断点、日志输出&&LLDB、性能检测、和视图调试器。
断点里面根据作用和功能也有很多种类:普通断点、条件断点、异常断点、符号断点等。
当程序运行到断点处时会暂停运行。比如断点打在30行,那么程序就会停在30行(注意:程序只运行到了前29行,第30行其实还没有被执行。)。只要在代码行旁边点击,就能添加一个断点,再次点击,断点变成浅蓝色,就能让断点不可用(disable了,仍然存在,只是不起作用了)。
打上断点之后,对断点进行编辑,设置相应过滤条件。单击右键会弹出选项框,四个选项分别为:
利用Xcode进行软件开发时,总避免不了出现异常而导致程序崩溃,但有时候又不知道哪里出错,只能利用下断点一点一点测试,虽然也能测出来但总是不能一步到位。其实Xcode有个异常断点,可以在导致程序崩溃或者引发异常的那行代码上自动设置断点。
步骤1⃣️:(1)打开断点导航器 -> (2)点击下方➕号 ->(3)选择“Exception Breakpoint”
步骤2⃣️:按照上述步骤选择之后,将会看到异常断点的编辑条件,在这里你可以根据自己的需要编辑自己的异常断点条件:
Exception选项可以让你选择响应Objective-C对象抛出的异常,也可以选择响应C++对象抛出的异常。 Break则是选择断点所接收的异常,是接收“Throw”语句抛出的异常还是Catch语句的。
步骤3⃣️:运行程序,解决问题后。删除该异常断点。
Symbolic Breakpoint为符号断点,可以针对某一个方法(函数)设置断点并暂停执行;有时候,我们并不清楚会在什么情况下调用某一个函数,那我们可以通过符号断点来跟踪获取调用该函数的程序堆栈。
步骤1⃣️:如同设置异常断点一样,在点击➕之后,选择“Symbolic BreakPoint”
步骤2⃣️:编辑要断点的方法名、条件等。
步骤4⃣️:运行项目,此时Xcode会停在你的断点方法中。
关于日志输出,最先可能想到的是在代码编辑区的NSLog(),虽然在打印的时候很清晰,但是缺点就是在我们需要在想要打印的位置添加NSLog代码并重新运行项目,这样会比较耽误时间,影响开发效率,而我们在调试过程中用的比较多的是打断点,然后 p 或者 po 一下。这个 p 和 po 就是LLDB中的打印(print)命令。像下图中,在29行中打了断点,在下方控制台的右边会出现一个"lldb"的对话窗。
在lldb中输入help,然后回车,可以看到lldb的一些常用的命令,如下图所例。常用的命令为po、p、expression、call...
expr 或 e : expression 的缩写,可以在调试时动态执行指定表达式,并将结果打印出来,是LLDB调试命令中最重要的命令,我们以后经常用到的 p 和 po 命令的鼻祖 。expression 命令主要有两个功能:
注意:虽然 expression 命令有输出返回值功能,但是在日常调试过程中并不常用,一般这类打印功能被 p 和 po 命令代替,而 expr 常用于在调试过程中修改变量的值。
oc里所有的对象都是用指针表示的,打印出来的是对象的指针,而不是对象本身,可以采用 -o 来打印对象本身为了更加方便的时候,LLDB为 “expression -o --” 定了一个别名 :po ,它可用于输出OC对象和对象的信息。
方法调用:在断点调用某个方法,并输出此方法的返回值,一般常用于方法的调用。
常用命令如下:
运行此代码,崩溃信息如下:
上述crash根据调用栈信息如何定位到具体哪行代码出现问题:
我们可以使用在LLDB中使用 image lookup -a 地址 或者 image lookup --address 地址 命令进行定位。
通过逐步查看调用栈信息,我们可以看到的是在 -[ContainerViewController viewDidLoad] 方法中也就是在 ContainerViewController.m 文件的第36行数组越界导致的崩溃。
从左到右功能依次详细介绍:
静态分析:通过对代码静态分析,找出代码潜在的错误,如内存泄漏、空引用、未使用函数等。方法:菜单“Product" -> "Analyze" 或者使用快捷键 Shift + Command + B ,然后想办法消灭蓝箭头。
下面介绍一下在查看UI时经常用到的视图调试器:
Debug View Hierachy:调试视图层次,除了点击控制台出的图标,也可以从菜单中选择 Debug -> View Debugging -> Capture View Hierarchy来启动视图调试。在断点或者不是断点的情况下都可以通过点击这个按钮查看视图层级关系。
有了这个图层关系,我们可以很清楚的知道视图页面上的各个控件的位置关系,当我们在开发测试阶段时遇到某个控件不显示、控件被遮挡、或者需要查看当前视图view的类文件名时等,都可以通过视图调试器查看开进行调试查看,提高我们的开发效率。
调试导航器(Debug navigator)在测试项目时极为有用,在这里我们不仅可以看到APP的【CPU】处理器、【Memory】内存、【Disk】硬盘、【Network】网络请求的实时状态,并且在调试代码时也查看当前函数的调用信息。
假如在下图中的第47行打了一个普通断点,此时方法执行到第46行停止,我们可以在调试导航器中看到当前函数被哪个线程的哪个函数调用,比如本例中该 viewModel 的懒加载函数其实是在 Thread 1 (main Thread)中的 -[ContainerViewController viewDidLoad] 方法被调用。
想要开发出高性能的APP,我们必须对以下面板信息时刻关注并不断改进。
本文主要总结介绍了一些关于Xcode使用提效的基本操作,希望能够帮助对这部分知识不够熟悉的 iOS 开发的小伙伴解决实际学习和工作中可能遇到的问题. 如有纰漏, 欢迎各位路过的大佬们批评指正,提出宝贵意见。有问题的朋友也希望各位留言讨论,与大家共同进步,感谢!