JoshPell

人生只有必然,没有偶然

欢迎来到我的个人网站~


iOS开发调试总结

软件开发工作,调试是必备技能,重要性不多说。而调试方法在不同的平台和语言中大部分都是可以互相迁移借鉴的。不同语言、不同IDE、不同平台的调试,有同性也有个性。本人iOS开发,语言就用OC,IDE就用Xcode,来唠唠开发调试

一、NSLog打印

NSLog打印是最常用的调试方法,也是初学者最喜欢最简单的调试方法,通过打印信息来查看运行路径和数据等。但打印出的信息比较少,NSLog本身效率也较低,但也不失为一种方法。用下面的宏做NSLog的优化,可以打印类名、所在方法名、详细时间和行号等信息。

#define TJLog(format, ...) do { \
    fprintf(stderr,"<%s : %d> %s\n", \
    [[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String], \
    __LINE__, __func__); \
    (NSLog)((format), ##__VA_ARGS__); \
    fprintf(stderr,"-------\n"); \
} while (0)

二、生命周期方法init、dealloc

在ViewController中,有两个生命周期方法我们可以重写,也就是init、dealloc方法。对于监听某些对象的状态很有帮助,特别是在dealloc方法中查看当ViewController退出的时候某个对象有没有release掉。这里也没有啥代码,自己视情况而定。

三、查看代码运行时间

有时候需要做代码优化或者耗时操作,分析效率问题,就需要知道代码的执行时间长短。网上看了看资料,直接使用宏就行

#define CODE_START NSDate *startTime = [NSDate date]
#define CODE_END   NSLog(@"Time:%f",-[startTime timeIntervalSinceNow])
//用法
	CODE_START;
   //放置被监测代码
   CODE_END;

控制台打印:

photos

四、僵尸对象

iOS中把release完但却没有完全消失的对象叫做僵尸对象,这时若再次释放,就会出现异常。苹果对此优化后的ARC对这种情况做了很多优化处理,但偶尔难免还是会出现。开启僵尸对象监听模式后,可以快速定位异常位置,便于我们快速调试。方法:Product–>Scheme–>Edit Scheme. 勾选Enable Zombie Objects即可。

photos

五、Analyze分析器

Analyze分析器是一种静态分析工具,可以对当前程序进行静态分析,找出未使用的变量或一些死储存等等。方法:Product–>Analyze.然后就是慢慢等它分析完,如下蓝色的标记就是静态分析的结果。

photos photos

六、断点

1.普通断点

断点(Breakpoint)绝对是调试程序的第一大选择,也是有一个基础调试技能。断点打在哪儿当程序运行至此时就会暂停到这里(这一行未被执行)。

photos

点击数字行数就在此行添加断点,再点击一次则取消(还有颜色,但不起断点作用了,可能是提醒你曾经在这里打过断点),调试中还能在下方调试信息区看到参数的值:

photos

2.条件断点

上面是最普通的断点使用方法,我们还能对断点的属性进行配置,设置条件,让断点更智能化

photos

点击Edit Breadpoint…就是进入条件断点,以下面代码为例

-(void)test{
	for (int i = 0;i < 5; i++){
		NSLog(@"我的值:%d",i);
	}
}

我并不想每次循环都有断点,只有在为3时需要,则条件如下:

photos

photos

也可以查看某个方法被调用的次数,设置Action参数如下,注:要选中Automatically continue after evaluating actions。

photos

控制台输入如下:

photos

七、异常断点

断点功能不止于上面所述,iOS开发者都遇到过,我们程序因为异常而crash代码就直接跑到main函数了。很多时候开发者不知道从何下手,下面就是讲用异常断点来让代码终止在出现异常的那一行 添加异常断点:

photos

若有异常则会出现下面图样的情况,点击进行查看:

photos

1.符号断点 Symbolic Breakpoint

创建方法跟异常断点一样,符号断点可以在指定的类名或者方法名中执行异常中断

photos

配置符号断点如下:假如需要在执行到ViewController类的viewDidLoad方法时执行中断。

photos

如果你的Symbol只写了一个函数名,那么就会在出现该函数名的地方就中断执行。如下,就会在运行到doAnimation的时候中断

photos

以上就是跟大家分享的调试经验啦!


打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

Powered by 谭健,分享从这里开始,精彩与您同在


正在加载中……