iOS程序中主要有两种错误
1)一种是编译错误,编译错误一般情况下在Xcode的程序编写过程中可以被检测出来,以红色标注,并且给出错误原因的提示。
2)一种是逻辑错误。而逻辑错误在我们的编码过程中是看不出来的,这些错误可以通过测试和调试找出
3)警告 有关警告的内容有的时候会引起程序崩溃,因此需要对警告信息一一排查。
4)在Xcode中因为系统错误或者是链接错误暂不在讨论之列。
(1)有关XCODE中的调试功能
1.普通调试
就是在程序中加断点,然后执行单步调试并观察变量的值的过程。
断点呢 类型是比较多的,通过查找资料得知,断点主要的类型有五种,
1)文件行断点 执行到特定文件的某一行时触发
2)符号断点 调用一个函数或者是某个方法时触发,程序挂起在函数或者方法的第一行。
3)异常断点 产生异常时候触发。
4)openGL ES断点 OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL 三维图形 API 的子集
5)单元测试断点 当进行单元测试时候,测试失败的情况下断点会停留在测试失败的代码行。
后面两种比较少
文件行断点设置:直接点击文件行号、右键单击断点,可以对断点进行删除,使用和编辑。也可以拖拽断点成云朵状删除
编辑断点:选择编辑,那么会出现对话框。可以设置触发条件和忽略次数,并添加动作。
符号断点
导航面板 打开断点导航面板,可以看到所有的断点。
点击左下角的+号可以添加四种。
2.忽略他吧,并不知道什么状况下才会使用。
3.这个是符号断点,点击后出现创建符号断点对话框。例子 439
异常断点
1,捕获所有的异常,并定位到相应的出错误的地方。有的时候不是很好用。
程序在崩溃的时候,xcode经常没有给出准确的堆栈信息,而是定位在了main方法里,这个让人很是头疼,其实 xcode只要简单设置一下,就能准确给出堆栈信息了,打开xcode左边的Breakpoint Navigator ,点击下面的+号添 加一个Exception Breakpoint,可以选择 All, 然后再运行试试,Crash后,就会在在抛出异常的时候停下来了。
单步调试和观察变量的过程在此不再赘述。调试错误的时候我们可以观察变量的创建,初始化,赋值以及改变的一系列过程,在我们想观察一些代理方法的执行过程的时候也可以加上NSlog。
需要提及的一点是,在调试窗口左侧的变量查看窗口中,选择变量之后右键可以操作变量。如修改当前的变量,输出当前变量的详细信息。
2.日志输出。NSlog函数
NSlog函数的格式化字符串
NSlogv函数
还有一个软件NSlogger的软件。这个软件很好。
断言 swift语言出现之后,在SWIFT中有一个断言函数,
断言的两种格式:assert(condition,desc) condition=false时执行。
assertFailure(message)抛出异常,在日志中输出MESSAGE
例子:p447
NSAssert1
NSAssert2
NSAssert3
NSAssert4
NSAssert5
3.异常堆栈分析
gdb调试。
Xcode的调试器为用户提供了一个GDB的图形化界面,GDB是GNU组织的开放源代码调试器。但是,如果您需要您可以在命令行里使用GDB的命令,且gdb可以在终端运行,也可以在Xcode下的控制台(Console Drawer)中运行。
要在一个调试的任务里输入GDB命令行命令:
在工具栏里点击Console Drawer (控制台抽屉窗口)按钮打开控制台。
您可以在控制台里查看Xcode调试器发送给GDB的命令,或者您可以直接在控制台里输入GDB命令。在控制台窗口里点击然后在gdb提示符后面输入命令。
复制代码
1.命令 解释
2.break NUM 在指定的行上设置断点。
3.bt 显示所有的调用栈帧。该命令可用来显示函数的调用顺序。
4.clear 删除设置在特定源文件、特定行上的断点。其用法为:clear FILENAME:NUM。
5.continue 继续执行正在调试的程序。该命令用在程序由于处理信号或断点而
6. 导致停止运行时。
7.display EXPR 每次程序停止后显示表达式的值。表达式由程序定义的变量组成。
8.file FILE 装载指定的可执行文件进行调试。
9.help NAME 显示指定命令的帮助信息。
10.info break 显示当前断点清单,包括到达断点处的次数等。
11.info files 显示被调试文件的详细信息。
12.info func 显示所有的函数名称。
13.info local 显示当函数中的局部变量信息。
14.info prog 显示被调试程序的执行状态。
15.info var 显示所有的全局和静态变量名称。
16.kill 终止正被调试的程序。
17.list 显示源代码段。
18.make 在不退出 gdb 的情况下运行 make 工具。
19.next 在不单步执行进入其他函数的情况下,向前执行一行源代码。
20.print EXPR 显示表达式 EXPR 的值。
21.
22.print-object 打印一个对象
23.print (int) name 打印一个类型
24.print-object [artist description] 调用一个函数
25.set artist = @"test" 设置变量值
26.whatis 查看变理的数据类型