BUG,简单来说就是程序运行结果与预期的不同,下面来说说Xcode中的DEBUG方法
参考博文
断点调试
- 普通断点
- 全局断点
- 条件断点
1.普通断点
看图
当程序运行到断点处时会停下,然后进行单步调试
2.全局断点
当程序运行出现崩溃时,就会自动断点到出现crash的代码行
3.条件断点
我们如果在一个循环里面使用了断点,如果这个循环执行了100万次,那你的断点要执行那么多次,你不觉得蛋蛋都凉了的忧伤么?所以我们这么做:
编辑断点
添加条件Condition
还可以Action中在条件断点触发时执行事件
如:输出信息
4.方法断点
打印调试
尽管ARC已经让内存管理变得简单、省时和高效,但是在object的life-cycles中跟踪一些重要事件依然十分重要。毕竟ARC并没有完全排除内存泄露的可能性,或者试图访问一个被release的对象。
- NSLog
强化NSLog
代码语言:javascript复制//A better version of NSLog
#define NSLog(format, ...) do {
fprintf(stderr, "<%s : %d> %sn",
[[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String],
__LINE__, __func__);
(NSLog)((format), ##__VA_ARGS__);
fprintf(stderr, "-------n");
} while (0)
控制台输出
代码语言:javascript复制<ViewController.m : 32> -[ViewController viewDidLoad]
2016-10-14 17:33:31.022 DEUBG[12852:1238167] Hello World!
-------
利用NSString输出多种类型
- 开启僵尸对象
Xcode可以把那些已经release掉得对象,变成“僵尸”,当我们访问一个Zombie对象时,Xcode可以告诉我们正在访问的对象是一个不应该存在的对象了。因为Xcode知道这个对象是什么,所以可以让我们知道这个对象在哪里,以及这是什么时候发生的。 所以Zombies是你的好基友!他可以让你输出的信息更具体!
具体这样做:(僵尸只能用在模拟器和OC语言)
控制台(lldb 命令)
LLDB 是一个有着 REPL 的特性和 C ,Python 插件的开源调试器。LLDB 绑定在 Xcode 内部,存在于主窗口底部的控制台中。调试器允许你在程序运行的特定时暂停它,你可以查看变量的值,执行自定的指令,并且按照你所认为合适的步骤来操作程序的进展。(这里有一个关于调试器如何工作的总体的解释。)
你以前有可能已经使用过调试器,即使只是在 Xcode 的界面上加一些断点。但是通过一些小的技巧,你就可以做一些非常酷的事情。GDB to LLDB 参考是一个非常好的调试器可用命令的总览。你也可以安装 Chisel,它是一个开源的 LLDB 插件合辑,这会使调试变得更加有趣。
参考:
与调试器共舞 - LLDB 的华尔兹
LLDB调试命令初探
About LLDB and Xcode
The LLDB Debugger
基础
help
在控制台输入help
,显示控制台支持的lldb命令
打印值
缩写p
print是 expression --
的缩写
printk可以指定格式打印
如
默认 p
十六进制 p/x
、
二进制 p/t
(lldb) p 16
16
(lldb) p/x 16
0x10
(lldb) p/t 16
0b00000000000000000000000000010000
(lldb) p/t (char)16
0b00010000
你也可以使用 p/c 打印字符,或者 p/s 打印以空终止的字符串 p/d打印ACRSII(译者注:以 '