当前位置: 首页 > 科技观察

iOS常用调试方法:断点调试

时间:2023-03-12 05:58:13 科技观察

魔导在iOS项目开发过程中,经常会用到静态分析(Analyze)、断点(BreakPoint)和控制台(Console)进行代码调试。本文介绍的是Xcode中常用的调试方法“断点调试”。一、简介Xcode的断点功能是iOS开发者常用的功能。点击代码编辑区左侧栏,创建断点。程序每次运行到断点时都会暂停,方便开发者调试。如下图所示:同时,开发者可以使用上图中标有数字的工具辅助断点调试。各工具功能如下:开启/关闭断点(点击变为灰色,所有断点无效;再次点击变为蓝色,所有断点生效)继续执行程序(点击跳过该断点,继续执行程序)执行下一步(点击执行第37行代码)进入方法(点击进入-afunction方法)跳出方法(点击-afunction方法内部返回第36行代码)除了断点的基本用法,开发者还可以使用断点的高级特性:编辑断点、异常断点和符号断点。2.编辑断点双击断点或右击断点选择EditBreakpoint,打开断点编辑页面。该页面包含四个部分:Condition、Ignore、Action和Options,接下来会一一介绍。1.条件条件是条件。开发者可以在Condition输入框中设置触发断点的条件。比如在for循环中,可以设置一个断点,只在满足i==5时触发。如下图所示:2.IgnoreIgnore为忽略次数。开发者可以在Igore输入框中设置忽略该断点的次数。例如Ignore设置为5,则直到第6次执行到断点行时才会触发断点。3.ActionAction是触发动作。可以添加多个Action,断点触发后立即执行设置的Action。Action有6种执行方式,其中DebuggerCommand和Logmessage比较常用,如下图:1)DebuggerCommandDebuggerCommand允许开发者设置一些LLDB命令,从而实现打印对象等功能和修改变量。如下图所示:2)LogMessageLogMessage提供了一种标准的文本输出格式。开发者可以根据格式设置触发断点后的输出内容。其中@exp@表示输出exp的内容,%B表示输出断点的名称,%H表示输出断点执行的次数。如下图所示:4.OptionsOptions控制是否在执行完断点对应的Actions后自动继续执行程序。勾选该选项后,触发断点后不会进入调试界面。3.异常断点(全局断点)开发者可以很方便的在Xcode中创建异常断点。如下图所示:当创建异常断点时,会显示一个名为AllExceptions的断点,因此常被称为全局断点。当程序抛出异常时,会触发异常断点,大部分常见的错误都会被断点定位到相应的代码行,非常方便调试。比如:设置了全局断点后,我们在数组越界的地方写了一段代码。运行此代码时,断点将转到越界的行。如下图所示:当去掉全局断点,再次运行程序触发越界代码时,会把断点crash到main.m中,而不是定位越界线。如下图所示:4.符号断点符号断点(SymbolicBreakpoint)是一个全局断点,可以为某个方法(函数)设置。开发者可以很方便的创建符号断点,如下图所示:与普通断点相比,符号断点的编辑界面多了两个输入框Symbol和Module。1.Symbol开发者可以在Symbol输入框中设置断点启动方法/函数。如下图所示,在Symbol中设置一个方法/函数后,程序运行执行到这个方法时会触发断点。这里要注意Symbol:Method(OC方法)中方法/函数的写法:用+表示类方法,用-表示实例方法,参数声明不能??省略,不能有:;之后的空格function:(Cfunction):直接写函数名即可。2、模块开发者可以在Module输入框中设置Symbol中函数所在的库,避免不同库中的方法/函数重名,默认不填。3、Condition等函数符号断点编辑页面中除Symbol和Module外Condition等函数的用法与普通断点一致。比如在Condition输入框中设置$arg3==nil&&$arg4==nil,就会限制断点只在第一个参数和第二个参数都为nil时触发。如下图所示:总结Xcode的断点调试功能非常强大。开发者可以充分利用断点调试,结合丰富的LLDB调试命令,将在很大程度上提高开发效率。【本文为栏目组织360科技、微信公众号“360科技(id:qihoo_tech)”原创文章】点此查看本作者更多好文