Xcode上手之调试程序

Xcode技巧系列:http://www.jianshu.com/notebooks/7639304/latest

1 静态分析

Xcode集成了Clang静态分析器,该分析器能够分析源代码,因为无需运行,即可对代码本身进行分析,所以称为静态分析器。

1.1开启

菜单栏Pruduct->Analyze即可开启分析操作。找到问题后,会在问题导航器中标记出来,如图:

Xcode上手之调试程序_第1张图片
屏幕快照 2017-02-21 下午9.52.25.png

分析器能够分析出来的问题有:

  • 逻辑错误
  • 内存泄漏
  • 死存储问题
  • API问题

逻辑错误

逻辑错误可能会造成程序奔溃,比如OC中,使用了未初始化的变量等。使用静态分析器可以很方便的找出。

内存泄漏

内存泄漏,就是程序丢失了某个对象的引用,因而它不会被释放内存,该内存无法读取也无法写入,该对象一直占用着内存空间可能导致程序奔溃。

静态分析器可以有效的找出内存泄漏问题。

死存储问题

代码中不会被访问的变量,这种问题是无法通过编译找到的,需要通过分析器来寻找。

API问题

由于没有遵循项目中所使用的框架或者库的要求而导致的。

比如在viewWillDisappear方法中,未使用[super viewWillDisappear],该问题只有通过分析器查找到。

2 断点调试

断点类似于中断,当程序运行到断点所在位置时,Xcode会暂停程序运行,保护此时程序的数据,等待开发者的调试指令。

2.1 使用

通常情况下,在代码左侧的边列中点击即可添加断点。

Xcode上手之调试程序_第2张图片
屏幕快照 2017-02-21 下午10.14.00.png

程序运行到此处会暂停。想取消,再次点击。拖动到空白处即是删除断点。

2.2 控制断点

右键点击断点,即可对断点进行控制和管理。

Xcode上手之调试程序_第3张图片
屏幕快照 2017-02-21 下午10.17.42.png

Edit Breakpoint:编辑断点
Disable Breakpoint:断点失效
Delete Breakpoint:删除断点
Reveal in Breakpoint Navigator:在断点导航器中显示

2.3 断点设置

点击Edit Breakpoint即可进入断点设置,如图:

Xcode上手之调试程序_第4张图片
屏幕快照 2017-02-21 下午10.22.54.png
  • 第一行:断点所处文件和行号,勾选或取消复选框,可以激活或失效断点。
  • 第二行:条件表达式,可以输入触发条件。当程序执行到此处时,会运行输入的条件表达式,如果为YES,则暂停程序。
    宏不能够识别!也无法识别断点作用域之外的变量和方法!
    如果不满足,则继续执行程序,忽略断点。
  • 第三行:忽略断点的次数,超过后,断点执行。
  • 第四行:指定断点触发时,Xcode的行为。可以执行特定的脚本或者一些动作。
  • 第五行:如果勾选,表示在遇到断点时,执行该断点中的动作,而不再暂停应用,继续执行。

在断点导航器下方,还可以通过+添加别的类型的断点:


Xcode上手之调试程序_第5张图片
屏幕快照 2017-02-21 下午10.38.02.png
  • Swift Error Breakpoint:swift错误的断点
  • Exception Breakpoint:异常断点,只有发生异常时,才会暂停程序运行。
  • OpenGL ES Error Breakpoint:只有在OpenGL ES错误发生时触发。
  • Symbolic Breakpoint:中断某个方法的调用,只要出现这个方法调用的地方,都会引发断点触发,从而暂停程序。
  • Test Failure Breakpoint:只有在测试断言失败的时候才会触发执行,这时,应用会暂停在引发测试失败的代码处。

2.4 调试区域

调试区域如图:

Xcode上手之调试程序_第6张图片
屏幕快照 2017-02-21 下午10.47.53.png

调试工具栏,区域①

如图所示最上面区域,有很多按钮,控制应用的运行。从左到右依次是:

  • 隐藏/显示调试区域
  • 启动/关闭所有断点
  • 继续/暂停进程
  • 单步跳过执行
  • 单步跳入执行,跳入函数内部
  • 跳出当前函数
  • 调试试图层次,打开试图调试功能
  • 调试创建过程
  • 地理位置模拟

变量试图,区域②

显示当前程序暂停处,存放在堆栈中的变量和寄存信息。可以根据需要选择显示的变量内容:


Xcode上手之调试程序_第7张图片
屏幕快照 2017-02-21 下午11.01.23.png
  • Auto:显示与当前作用域相关的变量
  • Local Variables:显示当前作用域下的局部变量
  • All...:显示所有变量

小眼睛:快速查看。
叹号:打印描述信息。
Filter:可以过滤复杂的信息。

控制台,区域③

用于输出应用打印内容。

下方可以设置输出内容:All Output所有,Debugger output调试器输出,Target Output对象输出。

3 LLDB调试

我们前面的调试,实际上都是使用LLDB命令,只是Xcode界面封装过了。只有在程序暂停时才可以使用LLDB命令。

Xcode上手之调试程序_第8张图片
屏幕快照 2017-02-21 下午11.35.24.png

LLDB命令只能读取当前作用域下的变量信息。

3.1 po

打印对象信息,对应于:print object。
格式:po 对象

3.2 p

打印值。
格式:p (类型)表达式
p (NSInteger)[view.description length]

3.3 expr

expression命令,动态执行指定的表达式,并将结果打印出来。
expr view.tag = 3

更多的指令,输入help即可查看列表,help 命令,会列出指定命令的所有子命令。

结语

其余的调试方式,比如UI界面,性能调试等,由于使用比较少,就不说了。

你可能感兴趣的:(Xcode上手之调试程序)