做IOS有一段时间了,把这段时间用到和学到的一些调试技巧大致罗列一下:
一、异常断点
作用:可以定位到导致程序异常崩溃的那行代码。
好处:一些类在不满足条件时(如数组越界),会抛出异常导致程序崩溃,可在Log中只能显示异常类型和调用栈的内存地址,很难定位到导致异常的具体代码,而通过添加异常断点,可以在程序崩溃时,定位到导致崩溃的异常所在的那行代码。
使用方法:在XCode左边视图中,切到断点面板,点击左下角的加号,选择“Add Exception BreakPoint",就会添加一条异常断点。
二、条件断点
作用:当满足某种条件时,程序才会在断点处暂停。
好处:这个老话题了,和Eclipse、VS一样,在特定场合提高调试效率,不用让程序不断的在断点处暂停,可以通过代码设置一个条件,也可以让程序忽略断点多少次,还可以设置在命中断点时执行debug命令。
使用方法:在断点处右击,选择"Edit Breakpoint...",在弹框中设置条件。PS:添加删除断点快捷方式:在代码行处"command+\"
三、运行时变量显示
作用:在程序运行时,获取成员对象的值
使用方法:1)通过NSLog()输出值 ; 2)通过断点暂停程序,在下面的窗口中,左侧可以显示对象树的信息,在右侧控件台中通过命令输出值。"p x"打印输出变量,"po x"打印输出对象,“po [xxview recursiveDescription]"打印view树信息。
四、日志输出
作用:通过在程序中添加NSLog代码,在控件台中输出显示日志。
注意事项:1)要通过宏可以在发布版中关闭这些日志输出,因为它可能会泄漏一些敏感数据,AppStore在审核时,会拒掉输出比较多Log的应用; 2)可以通过__FILE__, __LINE__, __PRETTY_FUNCTION__, NSStringFromSelector(__cmd)打印出文件名,行号,函数名
五、静态分析
作用:通过对代码静态分析,找出代码潜在的错误,如内存泄漏、空引用、未使用函数等。
方法:菜单“Product"->"Analyze"
六、动态分析
作用:通过Instruments工具跟踪分析程序运行时的数据
方法:菜单"Product"->"Profile"打开Instruments工具,里面有一系列内存、CPU、I/O等资源跟踪分析的工具,apple developer网站上有专门的文档介绍每种工具的使用方法