deubg context
断点停在Objective-C代码,LLDB使用Objective-C上下文。
断点停在Swift代码,LLDB使用Swift上下文。
强制表达式使用OC上下文
1 | // -l 使用的语言 |
User defined variables
当你打印对象时LLDB会自动创建临时变量,你也可以自己创建变量。
比如有时想自建一个对象再去实验一些方法
1 | (lldb) po id test = [NSObject new] |
这样会有报错
你得使用$
标记告诉LLDB你想记住的变量
1 | (lldb) po id $test = [NSObject new] |
xcode 11.3.1
符号断点:MasterContainerViewController.viewDidLoad 即有效
1 | (lldb) p self |
LLDB会创建变量$R0
continue
后再手动暂停
此时$R0
还持有引用
// 看看对引用计数的影响
1 |
|
我们还可以这样,创建一个断点,执行那个被持有变量的方法,命中断点
可以给方法不同输入观察其输出。TDD
1 | // -i disable this option -> by default, LLDB will ignore any breakpoints when executing commands |
Type formatting
GDB format
The full list of output formats is as follows (taken from https://sourceware.org/gdb/ onlinedocs/gdb/Output-Formats.html):
• x: hexadecimal
• d: decimal
• u: unsigned decimal
• o: octal
• t: binary
• a: address
• c: character constant
• f: float
• s: string
LLDB’s extra formatters
LLDB’s formatters can be used like this:
(lldb) expression -f Y – 1430672467
This gives you the following output:
1 | (int) $0 = 53 54 46 55 STFU |
This explains the FourCC code from earlier!
LLDB has the following formatters (taken from http://lldb.llvm.org/varformats.html): • B: boolean
• b: binary
• y: bytes
• Y: bytes with ASCII
• c: character
• C: printable character
• F: complex float
• s: c-string
• i: decimal
• E: enumeration
• x: hex
• f: float
• o: octal
• O: OSType
• U: unicode16
• u: unsigned decimal
• p: pointer
1 | // -n 告诉LLDB查询符号与函数名 |