文中相关的调度技巧均在Xcode4.5+环境中完成。app
初学者调试技巧推荐联接:函数
http://www.raywenderlich.com/10209/my-app-crashed-now-what-part-1lua
http://www.raywenderlich.com/10505/my-app-crashed-now-what-part-2spa
这篇文章给你们带来的是一些Xcode实用技巧,好比:3d
• 摆脱NSlog打印输出,使用断点日志。调试
• 摆脱TODOs注释来进行编译警告。日志
• 使用条件表达式来进行断点。code
• 使用LLDB动态修改数据。blog
• 等等。
get
能够经过cmd+shift+Y组合键或按以下方式调出控制台
能够根据习惯,在Xcode\Preferences设置控制台输出环境,通常设置为控制台+变量视图显示。
经过cmd+6或以下方式进入断点导航栏。
点击+添加异常断点
下面是断点编辑界面,异常断点的类型有Object C和C++2种,通常状况下选择All,当你的代码中有C++代码时,若是你只是定位Object C代码问题,建议选择Object C,若是你选择All,在调度过程当中可能会在不少C++的代码处停住,但相关代码其实并无错误(笔者如今的项目中碰到了此类问题)。
断点行为(Action),这个提供了很是强大的功能,可以在抛出异常的时候,执行Apple脚本,Debugger命令,log打印,执行Shell脚本,还能够播放声音等等。
Automatically continue after evaluating选项可使项目运行到断点时,不进入暂停状态,经常使用于断点打印信息(后面会讲到)。
通常使用异常断点,是为了定位抛出异常的代码位置,帮助快速解决Bug。
PS:能够在LLDB中输入bt命令,控制台会列出相关的函数栈Crash信息(LLDB相关使用方法,后面会讲到)。
相关LLDB命令:
在下面例子中,断点处,在LLDB中利用expr命令修改相关变量的值。
(关于expr命令须要说明的是须要知道明确的返回类型,即便返回类型为void,例如expr (void)NSLog(@"test"))
下面咱们用断点来完成相同的功能。先编辑断点(或cmd+option,点击断点),执行相关Debugger命令。
执行输出结果以下,用断点,完成了相同的功能,变量值在运行是被改变了。
这是一个颇有用的技巧,能够检测程序是束运行在正确的轨道上,条件生效时,进入调度模式,使用方式相似于断言语句(Assert) 。
程序运行,进入断点并执行Action。
ps:使用条件断点时,Automatically continue after evaluating复选框不要勾上,不然断点永远不会生效。
也是一个很是有用的调试技巧,程序会在遇到特殊符号时进入调试模式,符号能够是一个方法名、类中的一个方法、或者任意C方法(objc_msgSend)。
PS:一般用于观察你须要关注的方法,好比:-[NSException raise],malloc_error_break,-[NSObject doesNotRecognizeSelector:]等,能够快速帮你定义EXC_BAD_ACCESS等异常问题。
应用启动后,进入调试模式,并执行Action。
一、#warning add warning info,使用warning后,编译会产生警告,加在临时修改代码的地方,能够有效的防止错误提交代码等,特别是发布版本的时候,保证无任何编译警告,能够有效的下降风险。
二、#error add error warning info,error的使用更加严格,会让你的代码不能经过编译,适合忽略编译警告的人使用。
三、// TODO:这里尚未写完 优先级:1,TODO不会有编译问题,它会显示在跳转栏里(是否是很醒目),这个能够用来保留任务列表和评论,很实用。