ios 调试技巧

一、BreakPoint(普通断点)

当程序运行到断点处,便暂停运行。

调试过程可通过下方看到对应参数的值

二、Condition BreakPoint (条件断点)

对断点的属性进行设置,使断点智能化。右键进入断点属性设置。

ios 调试技巧_第1张图片

1、Condition 参数 : 特定值暂停程序运行。下图表示,当运行到i=2的时候,暂停运行。

此时,在控制台输出i=0和i=1的值,当i=2的时候,断点生效程序暂时停止运行。我们在此时再将i的值po出来,验证下,结果是一致的。
ios 调试技巧_第2张图片

2、lgnore参数(int类型): 忽略程序最前面的n次运行,而在n+1次中断程序,暂停运行。
ios 调试技巧_第3张图片

图中表示,在输出第3个数时,停止运行,此时,应该输出0、1、2这个三个数。此时,po出i的值,应该是i=3。验证下。
ios 调试技巧_第4张图片

3、Action 参数: 查看某个函数被调用的次数和某个函数具体在哪个函数里面执行。设置Action参数如下,注意要选中Automatically continue after evaluating actions。

3.1 输出函数NSLog被调用次数

查看控制台

3.2、 输出函数NSLog具体在哪个函数里面执行(被调用)
ios 调试技巧_第5张图片

查看控制台,输出函数NSLog在viewDidload中被调用
ios 调试技巧_第6张图片

三、异常断点(Exception BreakPoint)

开发iOS知道,如果我们因为异常然后程序crash了,代码就直接跑到main.m的main函数中去了。为什么就不能跑到出现异常的代码中呢?异常断点就为我们解决该问题,程序就会在异常出现的那行代码终止。

举个简单的例子,下面的这几行代码,明显的越界。

程序运行后,在没有添加全局异常断点的时候,程序直接crash在main函数中。

然而,在你添加异常断点后,会定位到具体的代码。

添加异常断点后,再运行程序
这里写图片描述

四、符号断点(Symbol BreakPoint)
符号断点可以指定哪个类里具体的某方法执行时中断。如果没具体某个类,只写方法名,那么当整个工程运行到某方法名时,程序就中断。
符号断点的创建跟异常断点差不多。
ios 调试技巧_第7张图片

右键编辑符号断点:在ViewController 类里面指定到_loadRequest 这个方法时打断。

效果如下
ios 调试技巧_第8张图片

当你的符号断点编辑只剩下方法名,那么工程里面指定到Symbol的函数名时,程序都会打断。
ios 调试技巧_第9张图片

五、僵尸对象

僵尸对象 :iOS中把那些已经release但还没完全消失的对象。
对已经release的对象再次释放,就会发生异常。
自从使用ARC后,由于对象释放产生的异常已经大大变少,但偶尔还会出现。开启僵尸对象模式后,就能快速定位到异常位置。开启方式如下:Product–>Scheme–>Edit Scheme.
勾选Enable Zombie Objects即可。
ios 调试技巧_第10张图片

六、lldb命令
Xcode中使用llvm编译器,lldb是llvm中的调试器,我们可以使用一些简单的命令进行调试,上面再讲到断点的时候有提到po命令。这是最常用的命令行之一,另外一个就是print。

七、暴力调试

  应该说NSLog打印信息是初学者最喜欢的调试手法,也是最简单的调试。
  通过打印出的信息查看程序运行的路径。但是打印出的信息较少,本身NSLog效率较低,而且损耗性能。一般在打包发布app的时候,尽量的去屏蔽这个输出函数。
  应该有很大一部分人会将NSLog定义成宏,在debug下,打印,release下不打印。
  然后,除了这个,输出函数要定义成宏海可以继续优化。输出具体:所在类名、所在方法名、详细时间、行号。
#define NSLog(format, ...) do { 

fprintf(stderr, "<%s : %d> %sn",   

[[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String],   

__LINE__, __func__);   

(NSLog)((format), ##__VA_ARGS__); 

fprintf(stderr, "-------n");   

} while (0)  

八、运行时间
有时候我们想要准确的知道某段代码、某个循环执行的时间,然后分析效率等问题,这个时候就需要执行时间是多少。
定义两个宏

#define TICK NSDate *startTime = [NSDate date]
#define TOCK NSLog(@"Time: %f", -[startTime timeIntervalSinceNow])

ios 调试技巧_第11张图片

九、手机截屏
可能你看到这个标题会觉得很奇怪,为什么手机截屏也放在调试技巧里面?开日常开发中,我们经常会在真机调试阶段用手机电源键+Home键截屏,然后利用手机上面的通讯软件发送给其他人,这个比较麻烦。x-code 也为我们提供了屏幕截屏的方式。
真机调试过程中,选择debug->View Debugging ->Take ScreenShot of IPhone。 mac桌面就会生成手机运行在该界面的手机屏幕截图。注意: 每需要截图都需要设置一次。

十、UI调试
一般的老程序员喜欢用纯代码去实现UI,对于新手来说,特别是复杂的UI,接手这样的项目就比较头疼。x-code提供了视图之间的层级关系,方便我们进行调试。当我们程序运行到某一个界面时,可点击下面的按钮
ios 调试技巧_第12张图片

这样就会进入视图调试模式,就可以轻易查看视图之间的层级关系

左侧的树形层次图可以在查看线程、队列和UI之间切换
ios 调试技巧_第13张图片

十一、内存分析器
快捷键: commadn+ shift +B
这个一般用来监测内存泄露问题。它是一种静态的工具,可以对我们的程序进行分析,找出我们未使用的变量,或一些死存储。

十二、Profile
ios 调试技巧_第14张图片

这个控制面板的组件,几乎每一个组件都能单独开一篇博客。之后再讲吧。

你可能感兴趣的:(ios,断点,调试技巧,僵尸对象)