原文转自:http://www.cocoachina.com/ios/20141128/10358.html

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

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

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

为了创建一个高质量的应用,要尽可能减少应用对用户系统的影响。使用调试导航器(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调用,并查看特定调用的渲染状态信息。

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

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

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

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

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

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

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

· 检查OpenGL ES 状态信息

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

在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同步。

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

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

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

· 模拟不同的地点。

在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区域。

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

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

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

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

【转】Xcode概览:调试应用程序的更多相关文章

  1. 在xcode 上调试c程序

    打开xcode 选择 Create a new Xcode project 选择Command Line Tool 给你的项目起个名,选择c语言 点击next 选择存储位置,就会制动生成一个项目,在项 ...

  2. [转]Xcode概览:调试应用程序

    原文网址: blog.csdn.net/fhbystudy/article/details/12856261 本文由CocoaChina翻译组成员Creolophus(github主页)翻译自苹果官方 ...

  3. xcode的调试技巧

    转自:http://www.cnblogs.com/daiweilai/p/4421340.html#biyouji 目录 前言逼优鸡知己知彼 百战不殆抽刀断Bug 普通操作 全局断点(Global ...

  4. 【转】Xcode概览(Xcode 6版):循序渐进认识Xcode

    该系列文章翻译自苹果的Xcode Overview文档,对大部分开发者来说,已经非常熟悉Xcode的功能和特性,不过伴随着iOS 8 SDK的发布,Xcode 6中也有些许调整,所以对该文档进行了翻译 ...

  5. 使用Xcode进行调试

    目录 知己知彼 百战不殆抽刀断Bug 普通操作 全局断点(Global BreakPoint) 条件断点(Condational Breakpoints)打印的艺术 NSLog 开启僵尸对象(Enab ...

  6. 使用未付费的账号真机调试 iOS 程序,过几天后程序一打开就会闪退

    使用未付费的苹果开发者账号真机调试 iOS 程序,过几天后程序一打开就会闪退.   解决办法: 删除 Provisioning Profile,重新配置一次. 终极解决办法:花钱购买苹果开发者账号. ...

  7. Xcode视图调试

    视图调试 使用视图调试器检查您的视图层次结构,可以轻松地判断视图位置.大小以及实现问题. 在XCode中运行你的应用程序,在调试栏上点击“调试视图层次”按钮,进入视图调试器. XCode停止你的应用程 ...

  8. iPhone 真机调试应用程序

    原文:http://blog.sina.com.cn/s/blog_68e753f70100r3w5.html 真机调试iphone应用程序 1.真机调试流程概述 1)       真机调试应用程序, ...

  9. iOS开发之Xcode常用调试技巧总结

    转载自:iOS开发之Xcode常用调试技巧总结 最近在面试,面试过程中问到了一些Xcode常用的调试技巧问题.平常开发过程中用的还挺顺手的,但你要突然让我说,确实一脸懵逼.Debug的技巧很多,比如最 ...

随机推荐

  1. tab切换-2016.6.4

    以前的tab切换,一般都是自己找网上的源代码,不知道含义,直接套,然后会有一些不知道的问题出现. 最近学习了jq(当然属于懒人的我,学习进度很慢),然后再工作中遇到了tab选项卡,所以决定自己写一个. ...

  2. NoSQL生态系统——事务机制,行锁,LSM,缓存多次写操作,RWN

    13.2.4 事务机制 NoSQL系统通常注重性能和扩展性,而非事务机制. 传统的SQL数据库的事务通常都是支持ACID的强事务机制.要保证数据的一致性,通常多个事务是不可能交叉执行的,这样就导致了可 ...

  3. mysql5.6新特性总结

    一. server参数默认值设置的变化http://dev.mysql.com/doc/refman/5.6/en/server-default-changes.html 二. innodb增强1.全 ...

  4. 【图像处理】【SEED-VPM】7.ubuntu10.04下 TFTP,NFS 安装指南

    Linux系统启动流程 程序开发调试的一般方法 1. TFTP下载内核+NFS网络文件系统.即内核和文件系统均不在板卡上.主要用于调试内核功能. 2. FLASH启动内核+NFS网络文件系统,即内核固 ...

  5. 在Ubuntu环境把PPT和Word转换为swf文件

    项目需要一个在线浏览文档的功能,于是参照网上的代码写了一份利用Microsoft Office 2010和swftools-2013-04-09-1007.exe转换的程序 思路:调用电脑本机的off ...

  6. C#将字节流加密解密

    public class Encrypt { public static byte[] ToEncrypt(string encryptKey, byte[] P_byte_data) { try { ...

  7. 《Android深度探索》(卷1)HAL与驱动开发读后感:

    第一章:安卓系统移植与驱动开发概述 全书分为4篇,分别从搭建开发环境,Linux驱动和Android HAL的基础知识,开发Linux驱动的高级技术和分析典型的Linux驱动源代码4个方面介绍Andr ...

  8. 节点NODE

    1.整个文档是一个文档节点 * 每个 XML 标签是一个元素节点 * 包含在 XML 元素中的文本是文本节点 * 每一个 XML 属性是一个属性节点 * 注释属于注释节点2. 获取NODE的方式 2. ...

  9. Log4j 用法

    一.Log4j基本使用方法 Log4j由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息的输出格式.日志信息的优先级从高到低有ERROR.WARN. INFO.DEBUG,分别用来 ...

  10. Devexpress DateEdit控件的值不反馈到数据源的处理方式。

    如果在GridControl中要把编辑的值反馈到数据源,可以用Gridview1.PostEdit()方法. 可是在datalayout中使用就会遇到一些问题:比如说DateEdit控件,在保存数据的 ...