Swift 代码调试-善用XCode工具(UI调试,五种断点,预览UIImage...)

原创Blog,转载请注明出处
http://blog.csdn.net/hello_hwc?viewmode=list
我的stackoverflow

工欲善其事,必先利其器,强烈建议新手同学好好研究下XCode这个工具。比如Build Settings,Build Info Rules,Build Parse, Edit Scheme…

前言:这个Swift调试系列分为四篇

  1. 图形化界面调试
  2. LLDB常用命令
  3. LLDB进阶使用
  4. Zombie等其他调试

2015.12月和2016.1月主要更新iOS开发的设计模式和Instruments优化技巧,穿插着写一些别的。

断点

断点是调试中经常用到的,让代码停止在错误出现的地方,看看变量以及上下文实际的变化,往往就能够找到问题所在。

点击左侧部分就可以添加断点,再单机可以禁用单个断点

Swift 代码调试-善用XCode工具(UI调试,五种断点,预览UIImage...)_第1张图片

导航栏中的断点列表

Swift 代码调试-善用XCode工具(UI调试,五种断点,预览UIImage...)_第2张图片

可以右键来禁用,编辑,删除断点。

断点上下文

Swift 代码调试-善用XCode工具(UI调试,五种断点,预览UIImage...)_第3张图片
让我们来看看图中的四个区域

  1. 这里可以看到CPU,内存,磁盘以及网络情况。注意,只有在实际设备上才是有意义的
  2. 线程信息,可以看到当前停在main Queue上,app运行的时候也启动了其他几个队列。注意,调试的时候看看代码运行的线程是否正确很有必要
  3. 这里可以看到Local变量,Swift有个好处是按照Module来划分了变量,简单粗暴
  4. 这个区域是LLDB调试区域,可以用LLDB命令执行任何动态的代码

我们着重来看下3,4区域,新手往往只会看变量,其实这里有很多可以利用的信息
Swift 代码调试-善用XCode工具(UI调试,五种断点,预览UIImage...)_第4张图片
其中
A. 禁用,启用所有断点
B. 继续执行
C. 跳过这一行
D. step in(例如进入到函数实现内部)
E. step out (退出step in)
F. 打开UI调试 (后问会详细阐述)
G.模拟位置
H.选择线程
I. 查看线程调用堆栈
其中I的截图如下
Swift 代码调试-善用XCode工具(UI调试,五种断点,预览UIImage...)_第5张图片

条件断点

举个例子,我想停在第888次执行?总不能一次次的continue吧!

 for var index = 0;index < 1000;index++ {
            print(index)
  }

右键断点,选择edit breakpoint
Swift 代码调试-善用XCode工具(UI调试,五种断点,预览UIImage...)_第6张图片

然后填写条件

condition就是代码触发的条件
ignore就是在断点触发前忽略几次
action是断点触发后,执行的LLDB动作,这里很简单就是打印当前的sum
options,执行完action后是否继续执行

可以看到运行的截图
Swift 代码调试-善用XCode工具(UI调试,五种断点,预览UIImage...)_第7张图片

准备工作

接下来讲的几种断点添加方式都是,在断点导航底部,如图添加
Swift 代码调试-善用XCode工具(UI调试,五种断点,预览UIImage...)_第8张图片

Swift Error 断点

这个在Swift开发中很常用

添加一个Swift Error断点

定义一个方法,来抛出Swift Error

   func test() throws{
        throw DemoError.Type1
    }
    enum DemoError: ErrorType {
        case Type1
        case TYpe2
    }

然后,这样调用

do{
    try test()
}catch{

}

会发现,在Swift Error发生的时候,断点触发

Swift 代码调试-善用XCode工具(UI调试,五种断点,预览UIImage...)_第9张图片

当然,Swift Error断点也支持编辑来捕获指定类型的Error

Swift 代码调试-善用XCode工具(UI调试,五种断点,预览UIImage...)_第10张图片

为了方便读者阅读,图片我没加水印,转发者请注明转自 Leo的CSDN博客(http://blog.csdn.net/hello_hwc?viewmode=list)

Exception断点

在抛出异常的时候触发
这个在iOS开发中很常用
有过iOS开发的都知道,Cocoa在错误的时候会抛出异常,而实用这个断点,会帮助我们捕获异常。
例如
随便performSelector,会抛出异常

   self.performSelector("abcdefg")

在添加了All Exception后,会停在这里
Swift 代码调试-善用XCode工具(UI调试,五种断点,预览UIImage...)_第11张图片

Symbol断点

停在不方便直接加断点的地方
例如,停在

-[NSObject setValue:forUndefinedKey:]

如图
Swift 代码调试-善用XCode工具(UI调试,五种断点,预览UIImage...)_第12张图片
然后,这样调用

        self.setValue("Dta", forUndefinedKey: "dagd")

会发现断点触发
Swift 代码调试-善用XCode工具(UI调试,五种断点,预览UIImage...)_第13张图片

Test Failure断点

这个就是使用XCTest框架来测试的时候,当Test Case的Assert失败的时候触发的断点。这里不截图了

变量图片预览

Swift 代码调试-善用XCode工具(UI调试,五种断点,预览UIImage...)_第14张图片

红圈中左边是预览,右边是打印Description

UI调试

如何打开UI调试
这里写图片描述

图中的红圈部分,点击后,整个调试区域如图
Swift 代码调试-善用XCode工具(UI调试,五种断点,预览UIImage...)_第15张图片
其中

  1. 用来查看View的层次结构,树状图
  2. View的可视区域,可以详细的看到View的叠加关系
  3. 选中某一个View后的属性

查看AutoLayout约束
右键某一个View

Swift 代码调试-善用XCode工具(UI调试,五种断点,预览UIImage...)_第16张图片

然后选择Show Constraints,

注意,第一张图右上角的地址

0x7f8169e7daa0

这里先记着,这个地址对LLDB的调试很有用,下一篇我会讲到

最后

欢迎大家关注Leo的CSDN博客

你可能感兴趣的:(xcode,技巧,swift,断点,调试)