原创Blog,转载请注明出处
http://blog.csdn.net/hello_hwc?viewmode=list
我的stackoverflow
工欲善其事,必先利其器,强烈建议新手同学好好研究下XCode这个工具。比如Build Settings,Build Info Rules,Build Parse,Edit Scheme…
前言:这个Swift调试系列分为四篇
- 图形化界面调试
- LLDB常用命令
- LLDB进阶使用
- Zombie等其他调试
2015.12月和2016.1月主要更新iOS开发的设计模式和Instruments优化技巧,穿插着写一些别的。
断点
断点是调试中经常用到的,让代码停止在错误出现的地方,看看变量以及上下文实际的变化,往往就能够找到问题所在。
点击左侧部分就可以添加断点,再单机可以禁用单个断点
导航栏中的断点列表
可以右键来禁用,编辑,删除断点。
断点上下文
让我们来看看图中的四个区域
- 这里可以看到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的截图如下
条件断点
举个例子,我想停在第888次执行?总不能一次次的continue吧!
for var index = 0;index < 1000;index++ {
print(index)
}
右键断点,选择edit breakpoint
然后填写条件
condition就是代码触发的条件
ignore就是在断点触发前忽略几次
action是断点触发后,执行的LLDB动作,这里很简单就是打印当前的sum
options,执行完action后是否继续执行
可以看到运行的截图
准备工作
Swift Error 断点
这个在Swift开发中很常用
func test() throws{
throw DemoError.Type1
}
enum DemoError: ErrorType {
case Type1
case TYpe2
}
然后,这样调用
do{
try test()
}catch{
}
会发现,在Swift Error发生的时候,断点触发
当然,Swift Error断点也支持编辑来捕获指定类型的Error
为了方便读者阅读,图片我没加水印,转发者请注明转自 Leo的CSDN博客(http://blog.csdn.net/hello_hwc?viewmode=list)
Exception断点
在抛出异常的时候触发
这个在iOS开发中很常用
有过iOS开发的都知道,Cocoa在错误的时候会抛出异常,而实用这个断点,会帮助我们捕获异常。
例如
随便performSelector,会抛出异常
self.performSelector("abcdefg")
Symbol断点
停在不方便直接加断点的地方
例如,停在
-[NSObject setValue:forUndefinedKey:]
如图
然后,这样调用
self.setValue("Dta",forUndefinedKey: "dagd")
会发现断点触发
Test Failure断点
这个就是使用XCTest框架来测试的时候,当Test Case的Assert失败的时候触发的断点。这里不截图了
变量图片预览
红圈中左边是预览,右边是打印Description
UI调试
如何打开UI调试
图中的红圈部分,点击后,整个调试区域如图
其中
查看AutoLayout约束
右键某一个View
然后选择Show Constraints,
注意,第一张图右上角的地址
0x7f8169e7daa0
这里先记着,这个地址对LLDB的调试很有用,下一篇我会讲到
最后
欢迎大家关注Leo的CSDN博客