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

iOS高效调试

时间:2023-03-13 19:41:23 科技观察

写代码难免有bug。储备一些调试技巧绝对可以提高你的工作效率,让bug不可见。给大家分享一些我在工作中经常用到的iOS调试小技巧。1、打印最简单,基本的调试方法就是打印日志。贴出两个封装的日志打印代码://swiftversionfuncDLog(message:T,file:String=#file,method:String=#function,line:Int=#line){#ifDEBUGprint(",\(method)\(message)")#endif}//OC版本#ifdefDEBUG#defineDLog(fmt,...)NSLog((@"%s"fmt),[[[NSStringstringWithUTF8String:__FILE__]lastPathComponent]UTF8String],__LINE__,__PRETTY_FUNCTION__,##__VA_ARGS__);#else#defineDLog(...)#endifeg://在AppDelegate.m中调用如下方法-(void)applicationDidFinishLaunching:(UIApplication*)application{DLog(@"helloworld");}//打印结果:2016-09-1817:19:27.931DateCell[2901:1622220]-[AppDelegateapplicationDidFinishLaunching:]helloworld2。断点(1)普通断点普通断点是调试中最常用的断点。当程序运行到断点时,将停止运行。它的设置方法很简单:点击需要设置断点的代码行左侧。普通断点(2)条件断点(给断点加上条件等属性,暂且称为条件断点)条件断点是在普通断点的基础上增加判断条件。当程序执行到断点处,满足设定的条件时,断点有效。设置方法如下:打开断点编辑框,在此处写上图片说明上面的设置中,条件断点的条件是i==3,那么只有当i=3时程序才会在断点处停止执行整个循环。在EditBreakpoint...窗口中有四个条目:Condition要设置的条件。Ignore表示忽略断点的次数。例如:如果不设置条件,将Ignore设置为4,则程序在i=4时的断点处停止。Action在程序断点处执行的操作(执行完后代码停止运行,设置的断点处的代码尚未执行)。这里的操作是LLDB语句,下面会介绍LLDB。Options选中后,Action执行后代码不会停止,就像没有设置断点一样。(3)ExceptionBreakpointExceptionBreakPoint在设置了异常断点的情况下,当程序崩溃时,Xcode会帮我们定位到崩溃发生的位置。如果没有异常断点,则设置异常断点。设置异常断点的步骤:这里写图片描述(4)SymbolicbreakpointSymbolicBreakpointSymbolicbreakpoint可以为某个方法或某个类的某个方法设置断点。实现的功能如下图所示:在某个类的某个方法中设置断点,在某个方法中执行断点设置步骤如下:symbolbreakpointsettingstep3.LLDBLLDB的Xcode默认调试器,我们启用调试执行LLDB命令的过程更加灵活。Xcode嵌入了LLDB调试窗口。程序执行到断点后,可以输入LLDB命令来操作调试过程。LLDB常用命令如下:1.po(printobject)输出对象,如po[selfview];2、p(print)用于输出基本类型,如p(int)[[[selfview]subviews]count]输出子视图的个数。3.expr(expression)可以在调试时动态执行指定的表达式,并打印出结果。通常用于在调试期间修改变量的值。如上图所示,当程序第一次到达断点时执行如下命令:expri=4,会看到如下输出:(int)$0=4继续运行程序,并程序的输出信息为:value:4i==44,callcall表示调用。其实上面的po和p也有调用的作用。所以call一般只在不需要显示输出,或者方法没有返回值的时候使用。我们可以在viewDidLoad:中设置断点,然后在程序中断时输入如下命令:call[self.viewsetBackgroundColor:[UIColorredColor]]此时视图的背景色变为红色。5、bt打印调用栈,plusall可以打印所有线程的栈。不给出详细示例,有兴趣的朋友可以自行尝试。6.使用frv-R命令打印出变量的原始信息和过期信息。如果您想了解更多详细信息,请单击此处。http://lldb.llvm.org/tutorial.html4。ChiselChisel是facebook用于界面调试的开源lldb命令。安装Chisel使用homebrew安装,如果没有安装homebrew,参考homebrew。brewupdatebrewinstallchisel安装完成后,在~/.lldbinit中添加如下内容,如果没有~/.lldbinit,则新建一个。#~/.lldbinit...commandscriptimport/path/to/fblldb.py重启Xcode,现在可以使用Chisel了。英语不好的同学可以看这里的command命令集。https://blog.cnbluebox.com/blog/2015/03/05/chisel/5。界面调试工具:RevealReveal绝对是一款iOS界面调试工具。一旦你使用它,你就离不开它。关于Reveal的介绍,可以去官网了解。安装Reveal需要付费,提倡正版。以下破解版仅供教学使用,不用于生产环境。1、从官网(https://revealapp.com/)下载Reveal并安装;2、下载破解文件(https://pan.baidu.com/s/1bNPhlO),解压密码:7×48;3.破解步骤见破解文件说明。4.打开Reveal并开始使用它。新版本的Reveal可能会修改验证逻辑。如果破解不成功,请使用正版。项目中的配置在使用Reveal之前,需要对iOS项目进行简单的配置。配置方法一:Reveal可以使用cocoapods导入:在Podfile文件中importpod'Reveal','~>1.3'。如果配置方式没有使用cocoapods的话,配置起来有点麻烦。下面是详细的配置过程:1.使用Xcode打开你要查看UI的项目;2、打开Reveal,点击Help→ShowRevealLibraryinFinder;在这里写图片描述3.将Reveal.framework拖到打开的Xcode工程中,点击Finish;在这里写图片描述4,点击BuildPhases,从LinkBinaryWithLibraries中删除Reveal.framework;从LinkBinaryWithLibraries中删除Reveal.framework5,然后选择BuildSettings并在搜索栏中输入OtherLinkerFlags。选择OtherLinkerFlags,在OtherLinkerFlags中输入如下代码:-ObjC-lz-frameworkReveal配置OtherLinkerFlags6,运行模拟器,打开Reveal,链接模拟器。链接模拟器,你就完成了。然后你可以通过Reveal调试你的界面。作用六、调试工具集:FLEXFLEX是Flipboard开源的一系列应用程序调试工具集。FLEX以第三方库的形式集成在应用中。使用时将类库添加到工程中,然后调用[[FLEXManagersharedManager]showExplorer];显示用于调试的工具栏。它提供的功能如下:查看和修改视图查看任意对象的属性动态修改属性动态调用实例方法和类方法查看网络请求过程添加模拟键盘快捷键查看系统日志从堆中获取任意对象在沙箱中查看查看文件系统中的SQLite/Realm数据库在模拟器中触发3Dtouch查看应用中的所有类快速获取常用类,例如[UIApplicationsharedApplication]、应用委托、关键窗口上的根视图控制器等。动态查看NSUserDefaults中的值简直太神奇了。当您将FLEX集成到您的项目中时,就会意识到它的强大功能。结束语以上介绍了六种调试方式,开发时可以根据具体情况选择最合适的调试方式。