Xcode概览:调试应用程序

suiling· 2014-11-28

57.png

本文由CocoaChina翻译组成员Creolophus(github主页)翻译自苹果官方文档Xcode Overview:Debug Your App,校对唧唧歪歪,敬请勘误。

当您点击了工作区工具条中的运行按钮并且你的应用编译成功,那么Xcode运行您的应用程序并开启调试功能。您可以使用图形化的工具直接在源码编辑器中调试应用,比如使用Data tips、快速查看(Quick look)来查看变量值。

调试区域(Debug area)和调试导航器(Debug navigator)可以让您检查运行中的app的状态,并控制其执行。

065.jpg

为了创建一个高质量的应用,要尽可能减少应用对用户系统的影响。使用调试导航器(Debug navigator)中的调试仪表(Debug gauges)深入了解你应用的资源消耗,当你发现问题时,请使用Instruments确认并分析应用的性能。

如果你正在开发一款iOS应用,在设计和早期测试阶段可以使用iOS模拟器找出存在的问题。

你可以配置Xcode来帮助你专注于调试任务。举例来说,当代码运行到一个断点时,你可以让Xcode自动播放一次警告声,并创建一个命名为的Debug标签的窗口,Xcode可在此展示调试区(Debug area)、调试导航器(Debug navigator)以及断点处的代码。

控制执行并观察状态信息(Control Execution and View State Information)

Xcode允许您一行一行单步调试你的代码来查看特定执行阶段中应用的状态。使用调试区域(Debug area)来控制代码的执行,观察程序的变量和寄存器,观察控制台的输出并且与调试器交互。 你也可以使用调试区导航渲染帧的OpenGL调用,并查看特定调用的渲染状态信息。

通过点击工作区窗口工具条上视图选择器的中间按钮(59.png)来展示调试区域(Debug area)。

 60.png

点击调试区工具栏中的暂停按钮(在暂停60.png和继续601.png之间切换)来暂停app的执行。想要设置断点,只需要打开源代码文件,并且点击你想暂停执行代码所在行的边列(Gutter)。边列中一个蓝色箭头(63.png)会标识断点。如果想了解更多关于断点的信息,包括如何设置断点行为和不同类型的断点,请查看Breakpoint Navigator Help.

暂停应用后,当前正在执行的代码行会用绿色高亮。你可以使用调试区顶部条上的Step Over(01.png)、Step Into(02.png)、Step Out(03.png)三个按钮来单步调试代码的执行。Step Over会执行当前行的代码行,包括任何的方法。如果当前的代码行调用了一个方法,step into会开始执行当前代码行,然后在到达被调用方法的第一行时停止。Step Out则执行当前方法或函数的剩余部分。

当暂停执行时,调试导航器会打开并展示一个堆栈追踪。选中其中一项,在编辑区和调试区中查看该项目的信息。当你调试时,可展开或收起线程来显示或隐藏堆栈框架。

 61.jpg

将指针悬停在源代码编辑器中的任何变量上,可查看一个显示着变量值的数据提示。点击变量旁边的Inspector图标(QuickLookInspectorIcon_2x.png),将对象的Objective-C描述打印至调试区控制台,并在一个额外弹出视图中展示。

62.png

点击Quick Look图标(QuickLookVarIcon_2x.png)观察变量内容的图形化展示。你可以针对自己的对象实现自定义的快Quick Look。详细信息请查看Quick Look for Custom Types in the Xcode Debugger.

DataTipQuickLook_2x.png

当你在设备上构建并运行一个OpenGl ES应用时,调试区工具栏会包含一个Frame Capture 按钮( )。点击该按钮来捕捉一个frame。你可以使用OpenGL ES帧捕获做以下事情:

· 检查OpenGL ES 状态信息

· 内省OpenGL ES 对象,比如视图纹理和着色器。

· 在每次绘制调用之前单步调试状态调用,然后观察每个调用的变化。

· 单步调试绘制调用以准确查看如何构建图像。

· 在辅助编辑器中查看每个绘制调用使用哪些对象。

· 编辑着色器以查看应用程序上的效果。

以下截图展示已渲染帧的组件。左侧调试导航器显示部分渲染树,主调试器显示已渲染帧的颜色和深度资源,并展示其他一些图片资源。

64.jpg

想要了解更多关于调试OpenGL ES的信息,请查看Debug Navigator Help 和 Debug Area Help.

在运行时检查你应用的视图层次(Examine Your App’s View Hierarchy at Runtime)

点击在调试区顶栏的Debug View Hierarchy按钮(IB_Debug_ViewDebug_2x.png)来检查当前暂停应用的3D渲染视图分层。你可以:

· 通过在画布中点击并拖动来旋转该透视图。

· 使用左下方的滑动条增大或减小各视图层之间的间距。

· 使用右下方双滑块的滑动条改变可见视图的范围。滑动左滑块来改变最底层可见的视图,滑动右滑块来改变最上层可见的视图

· 按下展示剪切内容按钮(IB_ViewDebug_ShowClipped_2x.png)来显示选中视图中被裁减的内容。

· 按下展示约束按钮(IB_ViewDebug_ShowConstraints_2x.png)来显示选中视图的任何Auto Layout约束。

· 使用放大(+)按钮和缩小(—)按钮来增加或减少透视图的放大倍数。

 65.png

想要了解更多调试视图的信息,请查看Debugging Views

检查应用对系统资源的影响(Examine Your App’s Impact on System Resources)

调试导航器(Debug navigator)提供了能对应用程序性能进行深度分析的仪表。比如CPU仪表计量器展现了app的CPU的使用率,方便你侦测异常情况。根据应用的目的和功能,仪表计量器可以告诉你应用对内存、iCloud、OpenGL ES、电量以及CPU的影响。

 DebugGauges_2x.png

如果想要看详细的报告,可单击调试区的某个仪表计量器。如果你想要对你应用做更深层次的分析,请点击Profile In Instruments按钮。

 66.jpg

在问题区,电量报告会提供一个初步的诊断来告知你什么可能在严重损耗你的用电量。

 67.jpg

想要更多帮助,请查看Using Debug Gauges

测量应用程序的性能(Measure Your App’s Performance)

Xcode中的Instruments程序会从在运行的应用中收集数据,并且展现在一个图形化的时间线上。使用Instruments,你可以收集性能方面的数据,比如你应用的内存使用,磁盘活动情况,网络活动情况和图形操作。通过把数据放在一起查看,你可以分析你应用表现的各个方面来找出潜在提升性能的可能。你也可以自动化测试iOS应用的界面元素。

 68.jpg

在Xcode几种方法来打开Instruments,比如:

· 从仪表计量器详细报告界面点击Profile in Instruments 按钮

· 选择Product>Profile

· 在一个scheme中的Profile项中指定一个Instrument

Instruments程序使用名为instruments的单独的数据采集模块,来随时收集某个进程的数据。Instruments程序有一个模板库,每个模板包括了为获取相关信息的一系列instruments。

想要了解更多信息,请查看Performance OverviewInstruments User Guide

在iOS模拟器上进行早期测试(Perform Early Testing in iOS Simulator)

iOS模拟器可帮你在设计和早期测试阶段找到主要的问题。举例来说,iOS模拟器的Debug菜单提供的多款工具可为你提供帮助:

· 减速一个动画来找出问题。

· 触发iCloud同步。

· 辨认出那些可能会有损你应用性能的混合视图层。

· 辨别出源像素没有对准到目标像素的图片

· 查看哪些内容在屏幕外渲染渲染。

· 模拟不同的地点。

 69.png

在iOS模拟器的任何模拟环境下,主屏幕都会提供打开iOS原生应用(比如Safari,Contacts,Maps和Passbook)的功能。你可以在iOS模拟器中初步的测试你的应用与这些应用的交互。举例来说,如果你正在测试一款游戏,可以使用iOS模拟器来测试这款游戏是否正确调用Game Center。

iOS模拟器中的辅助功能检视器(Accessibility Inspector)可帮助你不受个人制约的测试你应用的可用性。Accessibility Inspector显示你应用可访问的每个元素的信息并且可以模拟VoiceOver与这些元素交互。如果想打开Accessibility Inspector,点击iOS模拟器的主屏按钮然后点击设置>通用>辅助功能。将Accessibility Inspector右侧滑动按钮打开。

你可以在iOS模拟器通过改变语言来测试你应用的本地化。设置>通用>语言与地区>iPhone语言。

尽管你可以在iOS模拟器中测试你应用的基本功能,但是作为一个测试平台,由于诸多原因,模拟器还有很多限制。比如:

· 因为iOS模拟器是在Mac上运行,并使用电脑的内存,这远大于真机上的内存。

· iOS模拟器使用Mac的CPU运行而不是iOS真机的CPU。

· iOS模拟器并不运行真机上的所有线程。

· iOS模拟器无法模拟像加速度计,陀螺仪,摄像头,或者近距离传感器之类的硬件特性。

开发应用时,请务必在你想要支持的所有iOS真机和iOS系统版本上运行和测试。

想要了解更多详细信息,请查看iOS Simulator User Guide中的Testing and Debugging in iOS Simulator一节。

自定义你的调试工作流(Customize Your Debugging Workflow

通过Xcode Behaviors来偏好定制Xcode的行为。选择Xcode> Behaviors,自定义在建立、运行和调试应用时Xcode该做的事。

比如,Xcode可以在你代码在断点暂停时显示调试区域或者在建立应用失败时,显示问题导航器

下面截图中展示了当代码暂停时,Xcode行为是怎么自定义的下面有些自定义行为的例子。

· 每次暂停时播放一个提示音。

· 在工作区域窗体中创建一个名为Debug的标签来展示调试导航器。

· 在Debug标签中同时展示变量视图和控制台视图。

· 在Debug标签中隐藏Utilities区域。

 70.jpg

当你设置了上面的行为后,当项目中的代码碰到断点时,Xcode在工作区窗口创建一个debug标签,里面显示特定的内容。

 71.jpg

你可以自定义Xcode的行为,这些自定义行为可以由菜单中的选项或者绑定的快捷键触发。选择Xcode > Preferences, 选择Behaviors偏好窗口,然后点击底部的Add(+)按钮。输入新行为的自定义名称然后按下Return。在右侧复选框中勾选当你触发这个行为时你想让Xcode做的事。比如,建立一个名为Unit Testing的行为用来保存你工程的快照并且运行你的单元测试。当你建立这个行为后,它会出现在Xcode> Behaviors菜单中。

想给自定义行为添加个快捷键的话,选择Xcode > Preferences然后点击Key Bindings。在Key Bindings偏好窗口中,选择Customized标签找到你自定义的行为。在文本框中,键入快捷键然后点击文本框以外的地方完成操作。

想要了解更多断点的类型和断点的作用,查看Breakpoint Navigator Help