登录 立即注册
金钱:

Code4App-iOS开发-iOS 开源代码库-iOS代码实例搜索-iOS特效示例-iOS代码例子下载-Code4App.com

查看: 135|回复: 6

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

[复制链接]

302

主题

584

帖子

2370

金钱

手工艺人

发表于 2018-1-3 10:38:51 | 显示全部楼层 |阅读模式

        
       

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




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



图形化界面调试
LLDB常用命令
LLDB进阶使用

Zombie等其他调试

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



<h2 id="断点">断点

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

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

        

        导航栏中的断点列表

        

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

        



<h2 id="断点上下文">断点上下文

        


让我们来看看图中的四个区域



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

这个区域是LLDB调试区域,可以用LLDB命令执行任何动态的代码

        我们着重来看下3,4区域,新手往往只会看变量,其实这里有很多可以利用的信息


其中
A. 禁用,启用所有断点
B. 继续执行
C. 跳过这一行
D. step in(例如进入到函数实现内部)
E. step out (退出step in)
F. 打开UI调试 (后问会详细阐述)
G.模拟位置
H.选择线程
I. 查看线程调用堆栈
其中I的截图如下



<h2 id="条件断点">条件断点

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

[Java] 查看源文件 复制代码
 for var index = 0;index < 1000;index++ {
            print(index)
  }

        右键断点,选择edit breakpoint

        然后填写条件

        



       

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

        可以看到运行的截图



<h2 id="准备工作">准备工作

        接下来讲的几种断点添加方式都是,在断点导航底部,如图添加



<h2 id="swift-error-断点">Swift Error 断点

        这个在Swift开发中很常用

        添加一个Swift Error断点

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

[Java] 查看源文件 复制代码
   func test() throws{
        throw DemoError.Type1
    }
    enum DemoError:  ErrorType {
        case Type1
        case TYpe2
    }

        然后,这样调用

[Java] 查看源文件 复制代码
do{
    try test()
}catch{

}

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

        

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

        

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



<h2 id="exception断点">Exception断点

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

[Java] 查看源文件 复制代码
   self.performSelector(&quot;abcdefg&quot;)

        在添加了All Exception后,会停在这里



<h2 id="symbol断点">Symbol断点

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

[Java] 查看源文件 复制代码
-[NSObject setValue: forUndefinedKey: ]

        如图


然后,这样调用

[Java] 查看源文件 复制代码
        self.setValue(&quot;Dta&quot;, forUndefinedKey:  &quot;dagd&quot;)

        会发现断点触发



<h2 id="test-failure断点">Test Failure断点

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



<h2 id="变量图片预览">变量图片预览

        

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



<h2 id="ui调试">UI调试

        如何打开UI调试

        图中的红圈部分,点击后,整个调试区域如图


其中




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

        查看AutoLayout约束
右键某一个View

        

        然后选择Show Constraints,

        

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

[Java] 查看源文件 复制代码
0x7f8169e7daa0

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




1
1



                                               

23

主题

7123

帖子

1050

金钱

iOS大神

Rank: 6Rank: 6

分享大神

发表于 2018-1-3 10:43:45 | 显示全部楼层
帮帮顶顶!!

0

主题

7102

帖子

-523

金钱

限制会员

发表于 2018-1-3 10:45:55 | 显示全部楼层
mark,收藏了

21

主题

7159

帖子

2482

金钱

手工艺人

发表于 2018-1-3 10:48:31 | 显示全部楼层
我是来学习的

21

主题

7126

帖子

2539

金钱

手工艺人

发表于 2018-1-3 10:55:15 | 显示全部楼层
好好 学习了 确实不错

15

主题

7103

帖子

1592

金钱

手工艺人

发表于 2018-1-3 10:59:40 | 显示全部楼层
code4app好的代码demo真的很多,谢谢啦~

16

主题

7148

帖子

1258

金钱

手工艺人

发表于 2018-1-3 11:06:25 | 显示全部楼层
支持,感谢,祝code4app越来越好~
*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

关闭

每日头条

通过邮件订阅最新 Code4App 信息
上一条 /4 下一条

广告投放| Github|申请友链|手机版|Code4App ( 粤ICP备15117877号-1 )

快速回复 返回顶部 返回列表