[译] Xcode 中的用户断点

本文讲的是[译] Xcode 中的用户断点,


Xcode 中的用户断点

大家应该都用过 Xcode 中的断点,但你们熟悉用户断点么?下面我将向你们介绍如何使用以及何时使用这种断点。如果你已经对用户断点有所了解了,可以查看下文章后面的清单,看看我们是如何在 PSPDFKit 中使用它们的,也许有一些新的东西可以添加到你的清单中!

常规断点

当创建一个常规断点时,它们会出现在 Xcode 的断点导航器中,分列在工作区或者工程下,这取决于你当前所工作的位置。你可以通过点击列表中或者它所指向的代码旁边的的断点符号来激活或禁用一个断点。

A regular breakpoint

这些断点保存在特定工作区或工程的个人设置中,仅自己可见。即使你将个人设置提交到项目中,在同一个项目中的同事也不会在他们的 Xcode 中看到你的断点。

分享断点

通过右击断点,选择 'Share Breakpoint',这个断点会对项目中的所有人可见。如果项目中有你希望每次都能停止执行的代码路径,例如自定义的异常处理或其他任何不应在正常情况下执行的特定的项目代码,这是很有用的。结合断点选项和可自动执行的断点,这对于提高调试体验也很有帮助。

另一个你可以用它来做的稍微不那么有用的事:在应用程序的执行代码路径中添加一个共享的断点,比如完成一个网络请求,让它自动地连续运行,并让它在每次被击中时播放一个声音 - 是的,你可以让你的断点发出声音。提交断点,然后看着试图弄清楚声音是从哪里来而抓狂的同事! 不过,在远程工作的环境下,恶搞你的同事是很难的,这就是我为什么没有在 PSPDFKit 这么做。。。但可以在我们的线下团建时拿来娱乐一下。

用户断点

你还可以用断点来做另一件事。它是一个很强大的特性,只不过在 Xcode 中有点难找。你可以通过右击断点选择 'Move Breakpoint To > User',使其变成用户断点。

A regular breakpoint

这会将断点从工作区或项目范围转移到一个用户范围内。这意味着断点会出现在你的机器上的所有项目中。虽然这对与特定项目相关的事情不是很有帮助,但还是有很多的断点可以被添加到用户范围的列表中。最明显的事情是 Objective-C 的异常和 Swift 的错误断点,可能每个人都会在每个项目中都添加一次相应的断点。使用用户断点的话,你只需添加它们一次,它们就会自动出现在您的所有项目中。

另一个我使用的用户断点是在应用程序启动时激活 Reveal。Reveal 是一个很好的用来调试视图相关问题的工具,我经常使用它。它需要通过一个服务来集成到你的应用中,并且服务需要自己启动,这可以通过调试器来实现,而不必添加相应的调试代码。当你把这个断点移动到用户空间下后,你就不再需要将它添加到每个项目中去。如果你的项目包含了 Reveal 的服务, 当应用程序启动时服务会自动启动。这个方法也在 Reveal 的 接入指南 提到过。

还有一些其他的断点在每个项目中都很有帮助。请记住,你可以停用它们,只在需要的时候打开它们;我的很多断点都是默认关闭的,但如果我需要它们,它们就在那里。这是我们团队在 PSPDFKit 中最喜欢使用的断点清单:

  • Symbol:UIViewAlertForUnsatisfiableConstraints

    当出现自动布局约束的问题时自动停止。这会比仅仅在Xcode的控制台输出一条打印信息更让你注意这个问题。它有助于我们及早地发现布局问题。

  • Symbol:NSKVODeallocateBreak

    在 KVO 抱怨观察者仍在原地的地方中断。

  • Symbol:UIApplicationMain
    Debugger command:e @import UIKit

    将 UIKit 导入到调试器中,不再需要在很多地方转换类型。你写过很多类似 p (CGRect)[self bounds] 的语句么?这消除了将其转换为 CGRect 的需求。

  • Symbol:-[UIViewController initWithNibName:bundle:]
    Debugger command:po $arg1

    在视图控制器初始化期间打印其类型。当在大型项目中工作或者你是个新来的,你会不知道所有试图控制器的名字。如果你想知道你要修改的视图控制器的名字的话,你只需激活这个断点,然后在应用中导航到这个视图控制器,你会在调试器中看到所打印的名字。

  • Symbol:-[UIApplication sendAction:toTarget:fromSender:forEvent:]

    当有事件发出时中断,例如按钮的触摸。这和上面那个很相似。激活这个断点,如果你不知道按钮被触摸时调用了哪个方法的话。p (SEL)$arg3 会打印出调用的选择器,po $arg4 会打印调用它的目标。

  • Exception Breakpoint: Objective-C
    Debugger command:po $arg1

    当 Objective-C 断点被触发时中断,并打印相应的异常信息。

  • Exception Breakpoint: C++

    当 C++ 异常抛出时中断。

  • Swift Error Breakpoint

    在 Swift 错误出现时中断。

  • Symbol:_XCTFailureHandler

    当单元测试产生错误时中断。如果你正在运行单元测试,并想要当错误出现时中断程序,这就是。

如果你的清单中有其他的你觉得有用的断点,请联系我。如果你想了解更多关于 Xcode 断点所能做的事情以及如何用脚本化的断点调试特定的实例的话,可以浏览我们的博客!





原文发布时间为:2017年7月27日


本文来自合作伙伴掘金,了解相关信息可以关注掘金网站。

时间: 2024-12-31 18:31:32

[译] Xcode 中的用户断点的相关文章

Xcode中的变量模板(variable template)的用法

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 你可能经常会写一些小的代码片段,里面自然少不了一些关键的变量.你会把这些代码片段放到网上,比如github里,作为示例. 但是有个问题,就是上述代码片段中的变量会根据不同系统,不同用户发生变化.在你这里有效的,可能在别人那就会无效. 举个不恰当的例子,比如其中有一个变量是你服务器的秘钥ID: NSString *keyID = @"12345678"

[译] Swift 中关于并发的一切:第一部分 — 当前

本文讲的是[译] Swift 中关于并发的一切:第一部分 - 当前, 原文地址:All about Concurrency in Swift - Part 1: The Present 原文作者:Umberto Raimondi 译文出自:掘金翻译计划 译者:Deepmissea 校对者:Feximin,zhangqippp Swift 中关于并发的一切:第一部分 - 当前 在 Swift 语言的当前版本中,并没有像其他现代语言如 Go 或 Rust 一样,包含任何原生的并发功能. 如果你计划异

iOS开发那些事-Git在Xcode中的配置与使用

很多Git命令都是在命令行下运行的,命令行下管理Git有很多优点不用多说.但最大的缺点是要求用户记住这些命令.因此Git图形界面还是很受一些用户欢迎的,其中Xcode作为集成开发环境工具,也提供了一定Git图形界面功能.但是要想在Xcode中使用Git管理工程代码还想需要进行一些配置,然后才能使用. 如果我们是使用Xcode 4创建的一个iOS工程,在终端的命令行中提交代码时候,可能会出现下面的部分信息: create mode 100644 HelloWorld/HelloWorld.xcod

[译]Swift 中的通用数据源

本文讲的是[译]Swift 中的通用数据源, 原文地址:Generic Data Sources in Swift 原文作者:Andrea Prearo 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m- 译者:Swants 校对者:iOSleep Swift 中的通用数据源 在我开发的绝大多数 iOS app 中, tableView 和 collectionView 绝对是最常用的 UI 组件.鉴于设置一个 tableView 或 collectionVie

《iOS 8开发指南》——第6章,第6.2节Xcode中的MVC

6.2 Xcode中的MVC iOS 8开发指南 在用Xcode编程并在Interface Builder中安排用户界面(UI)元素后,Cocoa Touch的结构旨在利用MVC(Model-View-Controller,模型-视图-控制器)设计模式.在本节的内容中,将讲解Xcode中MVC模式的基本知识. 6.2.1 原理 MVC模式会将Xcode项目分为如下3个不同的模块. 1.模型 模型是应用程序的数据,比如项目中的数据模型对象类.模型还包括采用的数据库架构,比如Core Data或者直

《iOS 8开发指南(第2版)》——第6章,第6.2节Xcode中的MVC

6.2 Xcode中的MVC iOS 8开发指南(第2版) 在用Xcode编程并在Interface Builder中安排用户界面(UI)元素后,Cocoa Touch的结构旨在利用MVC(Model-View-Controller,模型-视图-控制器)设计模式.在本节的内容中,将讲解Xcode中MVC模式的基本知识. 6.2.1 原理 MVC模式会将Xcode项目分为如下3个不同的模块. 1.模型 模型是应用程序的数据,比如项目中的数据模型对象类.模型还包括采用的数据库架构,如Core Dat

[译] 同中有异的 Webpack 与 Rollup

本文讲的是[译] 同中有异的 Webpack 与 Rollup, 原文地址:Webpack and Rollup: the same but different 原文作者:Rich Harris 译文出自:掘金翻译计划 译者:lsvih 校对者:avocadowang,Aladdin-ADD 同中有异的 Webpack 与 Rollup 本周,Facebook 将一个非常大的 pull request 合并到了 React 主分支.这个 PR 将 React 当前使用的构建工具替换成了 Roll

[译] ES6+ 中的 JavaScript 工厂函数(第八部分)

本文讲的是[译] ES6+ 中的 JavaScript 工厂函数(第八部分), 原文地址:JavaScript Factory Functions with ES6+ 原文作者:Eric Elliott 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m- 译者:lampui 校对者:IridescentMia.sunui Smoke Art Cubes to Smoke - MattysFlicks - (CC BY 2.0) 注意:这是"软件编写"系

【IOS-COCOS2D-X 游戏开发之十三】详细讲解在XCODE中利用预编译并通过JNI调用ANDROID的JAVA层代码(COCOS2DX里访问调用ANDROID函数)!

本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/android-game/725.html 很多看过之前Himi的[iOS-cocos2d-X 游戏开发之七]整合Cocos2dX的Android项目到Xcode项目中,Xcode编写&编译代码,Android导入打包运行即可! 博文的童鞋都在问我如何在Xcode中能调用Java的函数,比如在Android端需要加入广告.支付.等第三方平台或者