文档章节

Xcode 的正确打开方式——Debugging

孙哲
 孙哲
发布于 2015/03/05 11:08
字数 906
阅读 87
收藏 0
点赞 0
评论 0

程序员日常开发中有大量时间都会花费在 debug 上,从事 iOS 开发不可避免地需要使用 Xcode。这篇博客就主要介绍了 Xcode 中几种能够大幅提升代码调试效率的方式。

“If debugging is the process of removing bugs, then programming must be the process of putting them in.”
——Edsger W. Dijkstra

添加条件

有时候我们可能会在某个循环中创建断点,但一次又一次地点击 continue 直到我们想要的条件出现,显然是一种非常低效的方式。好在 Xcode 为我们提供了条件断点。

首先在下列代码中插入一个普通的断点

005X3nNxjw1epj51y64e5j30v2066dh5.jpg

右键点击断点,选择 Edit Breakpoint,在 Condition 一栏输入 i > 50

005X3nNxjw1epj58d0rb9j30qg08475v.jpg

这样一来,只有当程序运行满足条件之后才会触发断点了。

Symbolic Breakpoint

Symbolic Breakpoint 是一种非常强大的断点。在 Xcode 中找到 Breakpoint navigator(你可以通过快捷键 command + 7),在最下方点击加号,可以看到它。

005yyi5Jjw1epj5ioxn6zj30ey0om40r.jpg

添加之后在 Symbol 一栏输入 viewDidLoad。
这样一来,在程序中所有的 viewDidLoad 方法被调用时都会触发断点。

005yyi5Jjw1epj5lvq259j30qg0am411.jpg

当然,我们也可以仅仅为特定的某个类的方法添加断点。在 Symbol 一栏输入 [ClassName viewDidLoad] (Objective-C) 或 ClassName.viewDidLoad (Swift) 即可。

监控断点

我们调试程序的大部分时候都是为了监控某个变量的变化,在代码中变量出现的地方添加断点不仅累而且还可能漏掉,事后还得一个一个删掉,实在很累。

我们可以通过为变量添加监控断点来简单地做到这一点。

找到变量第一次出现的地方,添加一个普通断点,进入 debug 模式后在 Variables View 中右键变量,选择 Watch 变量名。这样,每一次该变量被改变都会触发断点告知我们。

005X3nNxjw1epj670zy9gj30q40icae0.png

我们可以在 Console 中看到其变化。(注:在 Xcode 6.1.1 版本中,在监控 Swift 变量时似乎还有一些问题,无法正确地显示变量的值)

005yyi5Jjw1epj67lkus1j30nk0petcy.jpg

日志信息断点

最常见的 Debug 方式应该就是 NSLog and println 了。通常我们会通过这种方式来打印输出各种实例信息以检测程序运行状态。

但这一调试方式也有很明显缺陷:

  1. 无法在运行时添加

  2. 添加数量过多之后干扰视线,又需要麻烦地删除或注释掉

  3. 会编译进 App,在正式版本中需要关闭(当然,我们可以通过宏来判断是否应该编译,但这也需要额外的操作不是吗)

所幸在 Xcode 中我们还有另一种选项。

在如下代码中添加一个普通的断点,选择 Edit Breakpoint,然后点击 Add Action,选择 Log Message,在输入框中输入 The number is: @number @

005yyi5Jjw1epj6loqychj31ca0ig7b5.jpg

运行效果如下图所示

005X3nNxjw1epj6nvef7zj30mq0gota1.jpg

这里因为有日志输出,所以我们可以勾选上最下面的 Automatically continue after evaluating actions,这样这个断点就只会安安静静地为我们输出日志了。

发声断点

同日志信息断点,编辑普通断点,Action 选择 Sound。当触发断点时会发出设置的声音。此 Action 配合 Automatically continue after evaluating actions 选项,可以做到酷炫的听声识 Bug。:)

总结

上述的日志信息断点及发生断点都是可以添加触发条件的。通过这些断点操作,自然是能够极大地提升日常开发中调试代码的效率了。

本文转载自:http://www.cocoachina.com/ios/20150225/11190.html

共有 人打赏支持
孙哲
粉丝 18
博文 30
码字总数 2877
作品 0
徐汇
高级程序员
React Native 真机调试

iOS 真机调试 方法一:(从设备访问开发服务器) 首先,你的笔记本电脑和你的手机必须处于相同的 wifi 网络中。 打开 iOS 项目的 AppDelegate.m 文件 更改 jsCodeLocation 中的 localhost 改...

Jack088
2015/10/10
3.7K
1
Github上的热门iOS开源项目:AFNetworking、MagicalRecord、BlocksKit以及XVim

1. AFNetworking AFNetworking是一个非常受欢迎的轻量级的iOS、Mac OS X网络通信类库。它建立在NSURLConnection、NSOperation以及其技术的基础上,有着精心设计的模块结构和功能丰富的API,让...

Im刘亚芳
2015/02/09
0
0
How use TexturePacker

如何使用 TexturePacker 的使用非常简单,启动后的界面如下: 看箭头说明,只需要把包含小图片的文件夹拖动到右侧的‘Sprites’栏中即可,如下: 可以看到,TexturePacker立即生成了一个Spr...

MrLovelyCbb
2014/04/01
0
0
IOS项目自动生成技术文档很方便实用

Xcode工具本身不具备这样的功能,但是我们通过一些插件和工具来达到这个目的。 生成注释 生成文档之前,我们需要给代码中的方法或者变量写上注释,然后再利用工具根据这些规范的注释自动生成...

田广ly
2016/03/18
88
0
CocoaPods的安装与使用——图文并茂版

注意:因为淘宝停止基于 HTTP 协议的镜像服务, 需要改用https的协议,所以gem sources -a http://ruby.taobao.org/应该写为gem sources -a https://ruby.taobao.org/ 接触过一段时间的iOS开...

Stefen123
2015/02/01
0
0
Mac OS X Lion 10.7.4上安装GTK+心得,兼谈如何解决fink的“could no

一、系统环境(OS X与XCode)   操作系统:Mac OS X Lion 10.7.4(11E53)   编程工具:Xcode 4.4.1(1448),并装好了它的“Command Line Tools”。   安装过程可参考这些帖子—— 在vir...

mickelfeng
2014/02/13
0
0
Xcode5.0使用iOS6.1SDK及模拟器

最近项目中,介于测试人员提出的问题,有些情况只在ios6的设备上才能显现,而本机的xcode已升级到最新的5.0,这可如何是好呢,在网上搜索了一番,找到如下方法解决此问题: 1.打开xcode5.0的...

夏雪冬日
2014/02/07
0
0
xCode5.0使用iOS6.1SDK及模拟器

最近项目中,介于测试人员提出的问题,有些情况只在ios6的设备上才能显现,而本机的xcode已升级到最新的5.0,这可如何是好呢,在网上搜索了一番,找到如下方法解决此问题: 1.打开xcode5.0的...

1054949000
2014/10/14
0
0
调试程序-断点,Debug,崩溃日志分析,友盟崩溃日志

一.设置和查看断点 断点可以分为以下3种类型。 1. 文件行断点设置 添加断点->右键选择Edit Breakpoint Condition:指的是条件表达式,该项允许我们对断点生效设置条件,表示当满足某一特定条件...

HelloSwift
2016/08/09
174
0
iOS开发 Xcode8中遇到的问题及改动

iOS开发 Xcode8中遇到的问题及改动 新版本发布总会有很多坑,也会有很多改动。 一个一个填吧。。。 一、遇到的问题 1、权限以及相关设置 iOS10系统下调用系统相册、相机功能,或者苹果健康都...

法斗斗
2016/10/28
87
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

idea tomcat 远程调试

tomcat 配置 编辑文件${tomcat_home}/bin/catalina.sh,在文件开头添加如下代码。    CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=7829" Idea端配......

qwfys
今天
1
0
遍历目录下的文件每250M打包一个文件

#!/usr/bin/env python # -*- utf-8 -*- # @Time : 2018/7/20 0020 下午 10:16 # @Author : 陈元 # @Email : abcmeabc@163.com # @file : tarFile.py import os import tarfile import thr......

寻爱的小草
今天
1
0
expect同步文件&expect指定host和要同步的文件&构建文件分发系统&批量远程执行命令

20.31 expect脚本同步文件 expect通过与rsync结合,可以在一台机器上把文件自动同步到多台机器上 编写脚本 [root@linux-5 ~]# cd /usr/local/sbin[root@linux-5 sbin]# vim 4.expect#!/...

影夜Linux
今天
1
0
SpringBoot | 第九章:Mybatis-plus的集成和使用

前言 本章节开始介绍数据访问方面的相关知识点。对于后端开发者而言,和数据库打交道是每天都在进行的,所以一个好用的ORM框架是很有必要的。目前,绝大部分公司都选择MyBatis框架作为底层数...

oKong
今天
12
0
win10 上安装解压版mysql

1.效果 2. 下载MySQL 压缩版 下载地址: https://downloads.mysql.com/archives/community/ 3. 配置 3.1 将下载的文件解压到合适的位置 我最终将myql文件 放在:D:\develop\mysql 最终放的位...

Lucky_Me
今天
2
0
linux服务器修改mtu值优化cpu

一、jumbo frames 相关 1、什么是jumbo frames Jumbo frames 是指比标准Ethernet Frames长的frame,即比1518/1522 bit大的frames,Jumbo frame的大小是每个设备厂商规定的,不属于IEEE标准;...

问题终结者
今天
2
0
expect脚本同步文件expect脚本指定host和要同步的文件 构建文件分发系统批量远程执行命令

expect脚本同步文件 在一台机器上把文件同步到多台机器上 自动同步文件 vim 4.expect [root@yong-01 sbin]# vim 4.expect#!/usr/bin/expectset passwd "20655739"spawn rsync -av ro...

lyy549745
今天
1
0
36.rsync下 日志 screen

10.32/10.33 rsync通过服务同步 10.34 linux系统日志 10.35 screen工具 10.32/10.33 rsync通过服务同步: rsync还可以通过服务的方式同步。那需要开启一个服务,他的架构是cs架构,客户端服务...

王鑫linux
今天
1
0
matplotlib 保存图片时的参数

简单绘图 import matplotlib.pyplot as pltplt.plot(range(10)) 保存为csv格式,放大后依然很清晰 plt.savefig('t1.svg') 普通保存放大后会有点模糊文件大小20多k plt.savefig('t5.p...

阿豪boy
今天
3
0
java 8 复合Lambda 表达式

comparator 比较器复合 //排序Comparator.comparing(Apple::getWeight);List<Apple> list = Stream.of(new Apple(1, "a"), new Apple(2, "b"), new Apple(3, "c")) .collect(......

Canaan_
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部