Tag: 断点

调试断点以替代打印

Xcode中的调试断点允许您替换打印并在以后的调试会话中重用调试语句。 通过简单地启用和禁用所需的断点,您还可以摆脱通常在CocoaLumberjack之类的库中定义的调试级别。 通过在需要时启用断点来重用它们 使用断点替换打印语句 保持代码干净,而无需调试日志 在此视图中,一旦断点被​​触发,您就可以定义其行为。 这将在控制台中记录以下行: “Did add 2 content items to bucket Photos” po代表打印对象,可用于在断点行的上下文中打印任何可到达的对象。 通过Automatically continue after evaluating actions勾选“ Automatically continue after evaluating actions您可以允许调试器在击中断点后继续运行而不会暂停。 带有断点的更高级的调试 您可以通过调试断点做更多的事情。 一个很好的开始是查看Paul Hudson的演讲“如何像专业人士一样进行调试”,此处提供了该演讲。 这个故事最初发布在: https://www.avanderlee.com/debugging/debugging-breakpoints/

带断点的Xcode调试(适用于初学者)

作为终身学习者,可以理解,犯错误是学习过程的一部分。 在编程中,这些讨厌的事情被称为🐞(错误)。 成为一名彻底而高效的调试器将使我成为一名更好的程序员,并最终使我能够长期编写出色的代码。 我认为最好对Xcode内的初学者级调试以及如何熟悉Breakpoint调试工具及其某些功能进行一些研究。 那么,什么是断点? 断点是一种调试工具,它使您可以暂停程序的执行直到某个时刻。 为什么要使用断点? 在代码中创建“暂停”点可以帮助您调查代码以查看错误发生的位置。 如何创建断点? 简单。 确定要在哪里暂停代码执行,然后单击左侧装订线以创建蓝色断点。 让我们看一下我们称为“调试区域”的出色之处。 上面的屏幕截图中发生了什么? 我创建了一个函数findSumOfEvens (),如果两个都是偶数,则它们将两个整数相加。 我在第24行调用了findSumOfEvens (n1:2,n2:4)函数后,在第25行设置了一个断点。该函数在第25行暂停,这意味着第二次调用findSumOfEvens (n1:1,n2: 6)未被称为YET。 我还注释了一些有用的Xcode调试按钮/区域 。 注意: 继续/暂停=(键盘快捷键是⌃ +⌘+ Y) 这些执行控制按钮: 跳过=(键盘快捷键是F6) 进入=(键盘快捷键是F7) 跳出=(键盘快捷键是F8) 我运行了该项目,控制台显示“您的偶数之和为6”。 接下来,我单击“ Step Over”按钮以执行下一行代码(第25行),这是我放置断点的位置。 在上方,您可以看到我“跳过”了实际上已执行IT的下一行代码,现在我的控制台已打印“您的两个数字都必须是偶数。 再试一次。” 我如何摆脱断点? 右键单击断点以删除: 等待,您的控制台中的(lldb)消息是关于什么的? LLDB代表“低级调试器”,它提供了用于iOS应用程序开发的基础调试环境。 它可用于查找和消除Swift和Objective-C代码中的问题。 断点和LLDB有何关系? 您可以在LLDB中键入快捷方式命令,以帮助您在代码的某些行设置断点,在代码中的许多点设置断点,列出所有断点并禁用断点。 在上面,您可以看到可以通过在LLDB中输入“选择器”(方法名称)来设置多个断点。 如果您有许多文件,并且不想单击所有文件来设置断点,这将特别有用。 在上方,您还可以“列出”项目中的所有断点。 在上方,您可以看到打印到控制台的详细列表信息,其中包括“命中计数” ,它表示我们达到某个断点的次数。 上面,我使用“ disable”禁用所有断点。 如果我只想禁用第二个断点 ,则应该输入“ breakpoint disable 2”。 上面,我在代码的特定位置设置了一个断点:第16行的ViewController.swift文件。 […]

Xcode中的断点和检查变量

想象一下,您刚刚构建了一个很棒的iOS应用程序,用于存储您拥有的图书的详细信息。 该应用程序有两个主要场景-一个场景包含一个列出所有书籍的表格,另一个场景可以在其中添加或编辑书籍的详细信息。 您甚至可以使用设备的相机或通过检测书籍的条形码来添加封面图像。 现在,假设您将您的应用程序发送给了一位朋友,以获得他们的反馈,而他们的回应如下: “添加图像并保存后,下次编辑书并保存时,书的封面似乎消失了……很奇怪吗?” 好。 这很奇怪-看起来您需要进行一些调试! 在本文中,我们将探讨诊断和解决此问题的方法。 我们将特别关注断点以及检查Xcode中变量的不同技术。 下载代码 在执行任何操作之前,我们需要下载该应用程序的代码。 为此,您将从Xcode中克隆项目。 1.选择源代码->克隆。 2.在文本字段中输入存储库的URL:https://github.com/iOSAppDevelopmentwithSwiftinAction/Bookcase.git。 Xcode项目应下载。 将选择默认分支,但是我们要选择其他分支。 我们可以在Source Control导航器中选择一个分支,您可以在Xcode左侧的列中找到该分支,称为导航器区域。 3.从左侧选择第二个选项卡。 这将打开“源代码管理”导航器。 4.打开Bookcase存储库,您应该看到三个组-Branchs , Tags和Remotes 。 5.选择Remotes,然后在Origin中找到Chapter15.1b.UpdatesNeedFixing分支。 右键单击该分支,然后选择“ 签出”以签出正确的分支。 由于尚未下载此分支,因此它不会下载。 6.连接iPhone或iPad,然后单击左上角的播放按钮,检查是否可以在设备上运行应用程序。 7.选择跳过按钮绕过入门。 复制问题 您需要做的第一步检查是尝试重现该问题。 有关您的朋友描述的问题的直观表示,请参见图1。 让我们尝试复制该错误。 从列表中选择一本书。 选择相机按钮,添加封面图像,然后选择保存。 现在,您应该在主表场景中看到封面图像。 到目前为止一切都很好! 3.再次打开同一本书,然后选择保存。 书籍图像返回到默认封面图像。 奇怪是对的! 可能会发生什么? 您直接怀疑是由于某种原因,当BookViewController生成要保存的书时,没有使用现有的书封面。 通过检查BookViewController类中的bookToSave变量,在touchSave方法中确认这touchSave 。 与Xcode中的情况一样,检查变量内容的方式有很多。 现在,让我们看一下一些内容,从您可能已经见过的方法print方法开始。 用print检查变量 要检查bookToSave变量,让我们使用print方法将其内容打印到控制台。 1.在touchSave方法调用dismissMe之前,打印bookToSave变量: print(“Saving book: \(bookToSave)”) 2.再次运行该应用程序,再次向书中添加封面图像,选择保存,重新打开书并选择保存。 这次,book对象应该打印到控制台,例如: […]