debug

1、GDB 和 LLDB 有啥区别?

GDB: UNIX及UNIX-like下的调试工具。
LLDB:LLDB是个开源的内置于XCode的具有REPL(read-eval-print-loop)特征的Debugger,其可以安装C++或者Python插件。

xcode里有内置的Debugger,老版使用的是GDB,xcode自4.3之后默认使用的就是LLDB了。

命令对比:lldb与gdb命令名的对照表

2、LLDB 怎么用?常用命令有哪些?

1、help 命令,查看命令列表和帮助
比如: help print

2、print 命令 打印基础类型内容 ,可以简写为 p
print 打印出结果的时候,会给结果指定一个变量名 一般是 $x
后面可以继续使用这个变量
比如 : p $0 + 100

3、po 命令 输出的Objective-C对象 ,调试器会输出这个 object 的 description。p打印出来的是指针.

4、expression命令 简写就是e,可以用expression来声明新的变量,也可以改变已有变量的值。我们看到e声明的都是 $ 开头的变量。我们在使用时也需要加上 $符号。
比如: e NSArray *$array = @[@"sss",@"bb",@"cc"]

5、next 命令 简写 n 下一步
6、step 步入 简写 s 进入函数
7、finish 步出 跳出函数
8、continue 简写 c 继续到下个断点,如果没有就直接执行了
9、quit 退出

3、expression表达式

1、执行某个表达式。 我们在代码运行过程中,可以通过执行某个表达式来动态改变程序运行的轨迹。 假如我们在运行过程中,突然想把self.view颜色改成红色,看看效果。我们不必写下代码,重新run,只需暂停程序,用expression改变颜色,再刷新一下界面,就能看到效果
Objective-C

1
2
3
4
// 改变颜色
(lldb) expression -- self.view.backgroundColor = [UIColor redColor]
// 刷新界面
(lldb) expression -- (void)[CATransaction flush]

2、将返回值输出。 也就是说我们可以通过expression来打印东西。 假如我们想打印self.view:

1
2
(lldb) expression -- self.view
(UIView *) $1 = 0x00007fe322c18a10

参考资料

深入了解GDB和LLDB
使用LLDB调试程序
熟练使用 LLDB,让你调试事半功倍
LLDB的使用
iOS开发调试 - LLDB使用概览