写代码不免出现bug。 储备些调试技能绝对可以提升你的工做效率,让bug无所遁形。下面就和你们分享一些我在工做中经常使用的iOS调试小技能。html
最简单,基础的调试方法就是打印日志了。贴出两段封装好的日志打印代码:git
//swift版
func DLog<T>(message: T, file: String = #file, method: String = #function, line: Int = #line) {
#if DEBUG
print("<\((file as NSString).lastPathComponent) : \(line)>, \(method) \(message)")
#endif
}
//OC版
#ifdef DEBUG
#define DLog(fmt, ...) NSLog((@"<%s : %d> %s " fmt), [[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String], __LINE__, __PRETTY_FUNCTION__, ##__VA_ARGS__);
#else
#define DLog(...)
#endif
复制代码
eg:github
//在AppDelegate.m中调用下面的方法
- (void)applicationDidFinishLaunching:(UIApplication *)application{
DLog(@"hello world");
}
//打印结果: 2016-09-18 17:19:27.931 DateCell[2901:1622220] <AppDelegate.m : 54> -[AppDelegate applicationDidFinishLaunching:] hello world
复制代码
普通断点是调试中最常使用的。当程序运行到断点处就会暂停运行。其设置方法很是简单:在须要设置断点的代码行的左侧单击便可。数据库
条件断点是在普通断点的基础上添加了判断条件。当程序执行到断点处,而且知足设置的条件时断点才会有效。设置方法以下:express
在上面的设置中,条件断点的条件是 i==3, 那么在整个循环中只有在i=3时程序才会在断点处中止执行。 在 **Edit Breakpoint...**窗口中有下面四个输入项:swift
- Condition 设置的条件。
- Ignore 表示忽略多少次以后断点有效。例如:不设置条件,Ignore设置为4,则i=4时程序在断点处中止。
- Action 在程序断点处执行的操做(执行完这个操做后代码中止运行,此时设置断点处的代码尚未执行)。这里的操做是LLDB语句,关于LLDB会在下面介绍。
- Options 当选中时,执行完Action的操做后代码不会中止,就像没有设置断点同样。
在设置异常断点的状况下 当程序crash时 Xcode会帮咱们定位到crash产生的位置。bash
设置异常断点步骤:网络
符号断点可以为某一个方法或者 某一个类的某一个方法设置断点。实现的功能以下图:app
设置步骤以下:工具
LLDB的Xcode默认的调试器, 咱们经过执行LLDB命令使调试过程更加的灵活。 Xcode内嵌LLDB调试窗口。在程序执行到断点后你能够输入LLDB命令操做调试过程。
LLDB经常使用命令以下:
1, po (print object)输出对象, 如 po [self view]; 2, p (print)用于输出基本类型, 如 p (int)[[[self view] subviews] count] 输出子视图个数。 3, expr (expression) 能够在调试时动态执行指定表达式,并将结果打印出来。经常使用于在调试过程当中修改变量的值。例如上图所示,程序第一次执行到断点时 执行下面的指令:expr i=4
你会看到以下的输出: (int) $0 = 4 继续运行程序,程序输出的信息是:value:4 i==4 4, call call便是调用的意思。其实上述的po和p也有调用的功能。所以通常只在不须要显示输出,或是方法无返回值时使用call。咱们能够在viewDidLoad:里面设置断点,而后在程序中断的时候输入下面的命令: call [self.view setBackgroundColor:[UIColor redColor]] 此时view的背景颜色变为红色。 5, bt 打印调用堆栈,加all可打印全部thread的堆栈。不详细举例说明,感兴趣的朋友能够本身试试。 6, fr v -R 命令来打印出变量的未加工过期的信息
若是想了解更详细的内容,戳这里。
Chisel是 facebook开源的用于界面调试的lldb命令。
Chisel 使用 homebrew 来安装,若是你没有安装homebrew, 参考 homebrew。
brew update
brew install chisel
复制代码
安装完成后,在~/.lldbinit 中添加以下内容, 没有~/.lldbinit则新建。
# ~/.lldbinit
...
command script import /path/to/fblldb.py
复制代码
重启Xcode, 此时Chisel就可使用了。
英语很差的同窗能够看这里。
Reveal 绝对是iOS界面调试利器。只要用上一次你就会离不开它。对于Reveal的介绍能够去官网了解。
Reveal是收费的,提倡正版。下面的破解版只供教学使用,不可用于生产环境。 1, 安装包及破解软件 连接: https://pan.baidu.com/s/1dFgjaYP 密码: 6wyq 2,破解步骤见破解文件中的使用说明。 3, 打开Reveal,开始使用。Reveal的新版本可能修改验证逻辑,若是没有破解成功那就使用正版的吧。
在使用Reveal以前须要对iOS项目进行简单配置。
配置起来略有麻烦。下面是详细的配置过程: 1, 使用Xcode打开你想要查看UI的工程;
2, 打开Reveal,点击 Help → Show Reveal Library in Finder;
3,将Reveal.framework 拖入打开的Xcode工程.并点击完成;
4,点击Build Phases 而后从Link Binary With Libraries 删除Reveal.framework;
5, 而后选中Build Settings 在搜索栏中输入 Other Linker Flags。选中Other Linker Flags 在Other Linker Flags中输入下面代码 : -ObjC -lz -framework Reveal
6,运行模拟器,打开Reveal,连接模拟器。
到此大功告成。接下来你就能够经过Reveal 对你的界面进行debug了。
FLEX是Flipboard开源的一系列在应用中调试的工具集。FLEX以第三方库的形式集成在应用中,使用时将类库加到工程中,而后 经过调用
[[FLEXManager sharedManager] showExplorer];
就可显示出用于调试的工具栏进行调试。
它提供的功能以下:
简直吊炸天。当你将FLEX集成到你项目中时就会认识到它的威力。
上面介绍了六种调试方法,开发时能够根据具体状况选用最合适的调试方法。若是本博文对你有帮助就送个喜欢吧。