Xcode调试技巧

一. 断点

Xcode支持很多种不同类型的断点,包括普通断点、符号断点、异常断点、watch断点、OpenGL ES Error 断点和Test Failure 断点。(后两者不常用)

1. 普通断点:

下普通断点很简单,找到你要下断点的代码行,点击编辑区左边的行数处即可;或者使用快捷键直接command + \


特点: 当程序运行到此处的时候将会暂停

2. 符号断点:

符号断点其实就是对一个特定的函数/方法名下断点,在导航区选择断点tab页 -> 点击最下面的加号 -> Add Symbolic Breakpoint


设置符号断点可以输入类名+方法名,也可输入方法名,Xcode会自动匹配在不同类中同名的方法进行断点。


特点: 一旦所填写的方法被调用,就会暂停。

3.异常断点:

异常断点在调试时如果程序抛出异常,导致程序退出,就会暂停。导航区 -> 断点tab –> 左下角加号 -> Add Exception Breakpoint


特点: 一旦程序异常就暂停,能立马定位问题,为比较常用的一种断点。

4. watch断点

watch断点就是当某个变量发生改变的时候触发的断点。在Xcode的watch窗口-> 右键需要watch的变量 -> watch “XXX”


当所watch的值发生变化时调试器会自动暂停。并打印信息

**特点: 当要观察某个值是否发生变化,可使用watch断点 **

5. 其他断点(不常用)

OpenGL ES Error Breakpoint 以及 Test Failure Breakpoint
OpenGL ES Error Breakpoint :主要是OpenGL ES的断点调试
Test Failure Breakpoint :这个类型的断点会在test assertion 失败的时候暂停程序的执行。

6. 编辑断点:

右键普通断点 -> Edit Breakpoint 添加条件

断点的属性以及说明

属性 说明
Condition 输入条件表达式,满足条件的时候断点就会生效。
Ignore 在这里可以设置忽略断点次数。
Action 一些断点触发时的操作。
Options 勾选Automatically continue after evaluating actions之后程序会在断点产生后继续运行。

7. 断点后的action:

断点后的action,其实就是当断点被触发可以执行一些操作。右键断点 -> Edit breakpoint -> Add action

Action的类型很多,有Debugger Command、Log Message、Apple Script、Shell Command等,常用的有Debugger Command和Log Message


Action对于调试是非常有用的,比如你需要在断点的地方频繁打印某一对象时,你不用新加log,然后重新编译,直接加一条Debugger Command就可以,下图为打印self.string信息

7.1 用于action的Debugger Command常用命令

1.po命令 : 打印对象信息


2.expr命令:可以在调试时动态的执行表达式,同时打印出结果。常用来动态修改变量的值。

3.call命令 :动态调用函数,可以在不增加代码,不重新编译的情况下动态调用一个方法。

二. UI调试

1.控件信息

可以使用上述的po命令以及expr命令来查看、修改控件属性。

2.快速预览

Xcode5之后支持在调试时对变量进行快速预览,调试时将鼠标放在变量上,然后点击快速预览按钮即可看到控件的显示。


3. 查看整体UI层级结构

点击在Xcode的watch窗口上方的debug view hierarchy 按钮


之后便可以观察当前应用窗口的层级结构

注意:在面板底部左侧有两个按钮。如下图所示,取消对这两个按钮的选定,否则会隐藏一些视图。

3.1 探索视图层次

对于如何查看某个视图,可以选定查看的视图,然后观察跳转栏(Jump Bar)比如当选定最底部的视图,则Jump Bar显示


当各个视图之间间距太小,可以使用左下方的slider来控制视图间的间距.
同时若滚动右下方的滑块,则可以隐藏不同层次的视图

3.2 查看视图

按下cmd + 6 调出导航栏的Debug navigator,选定要查看的视图。或者直接在编辑区选定。


接着使用cmd + option + 4打开工具区的Size Inspector,便可查看该视图的边界、位置、锚点以及Auto Layout约束列表。

也可以通过cmd + option + 3切换至Object inspector。你会看到一个选定对象的各项信息,比如背景颜色,tag等等。

三. 参考

本篇为作者认为常用的一些调试方法,若想深入了解,可以查阅以下参考文档。其次若有不足可以指出、探讨。

XCode基本使用及调试技巧

只会左键断点?是时候试试这样那样断点了

breakpoints、lldb 和 chisel 的详解

详解Xcode 6的视图调试

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,646评论 4 366
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,979评论 1 301
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,391评论 0 250
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,356评论 0 215
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,740评论 3 293
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,836评论 1 224
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,022评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,764评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,487评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,728评论 2 252
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,200评论 1 263
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,548评论 3 260
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,217评论 3 241
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,134评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,921评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,919评论 2 283
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,766评论 2 274

推荐阅读更多精彩内容

  • 剑未配好,出门已是江湖。 最近一直没有更新简书是因为在开发和测试阶段,有任务,没有进行学习,不过在做任务的时...
    和珏猫阅读 8,028评论 9 75
  • 前言 Xcode调试(debug)是每位IOS开发者经常做的事,很基础也很重要,学到一些调试技巧无疑会给工作带来很...
    xmy1012阅读 1,403评论 0 1
  • 作者原文链接:点这里 一、普通操作: 1.打断点 当然也还可以监视某个变量! 在对象视图中,右键某个对象,点击“W...
    DestinyFighter_阅读 1,540评论 0 4
  • 程序员日常开发中有大量时间都会花费在 debug 上,从事 iOS 开发不可避免地需要使用 Xcode。这篇博客就...
    kenny肉桂阅读 583评论 0 5
  • Python中的random模块用于生成随机数。下面介绍一下random模块中最常用的几个函数。 random.r...
    老王叔叔阅读 4,617评论 0 0