设置断点:
-
对所有C函数 functionA 设置断点
- breakpoint set --name functionnameA --name functionNameB
- br s -n functionA
- b functionA
-
对FileA文件的LineNum行设置断点
- breakpoint set --file FileA --line LineNumber
- b fileA:LineNumber
-
C++ 函数, 对所有C++ 的 foo 函数设置断点
- breakpoint set --method foo
- br s -M foo
-
OC 对所有 aSelector 设置断点
- breakpoint set --selector aSelector
- br s -S aSelectro
-
设置 [NSString stringWithFormat] 断点
- breakpoint set --name "-[NSString stringWithFormat:]" (也是通过name的方式)
- b -[NSString stringWithFormat:]
-
可以添加 --shlib xxx.lib 来限制只设置这个模块的断点
- breakpoint set --name functionA --shlib foo.dylib
- breakpoint set -n functionA -s foo.dylib
-
设置条件断点
- breakpoint modify -c 'i == 10'
-
命中n次后停止
- breakpoint modify -i n
-
当开始执行某个queue的时候停止
- breakpoint modify -q 'queue.name'
-
显不所有断点
- breakpoint list
- br l
-
删除断点
- breakpoint delete 1.1
- br del 1.1
-
添加命令
- (lldb) breakpoint command add 1.1
- Enter your debugger command(s). Type 'DONE' to end.
- bt
- DONE
WatchPoint
- 当变量值改变时触发断点
- (lldb) watch set var global
- 添加条件,(当值改为5时才触发)
- (lldb) watch modify -c 'global == 5'
- 当指针指向的地址内存数据发生变化时触发
- watchpoint set expression -- myptr
- wa s e -- myptr
- 如果没有指定 -x byte_size ,默认观察指针大小的区域
流程控制
- 代码级别单步执行
- step
- 代码级别执行洗一条语句
- next
- 指令级别单步
- stepi
- 指定级别执行下一条指令
- nexti
- 跳出当前帧函数
- finish
查看变量###
- 查看当前堆栈
- thread backtrace
- bt
- 切换当前堆栈帧
- frame select 3
- 显示当前栈帧的参数和局部变量信息
- frame var -A
- 以16进制的格式,显示当前栈局部变量的值
- frame variable --format x bar
- f v -f x bar
- 显不当前文件的全局变量/静态变量
- target var
- ta var
执行表达式###
- expr (int) printf ("Print nine: %d.", 4 + 5)
- expr unsigned int $foo = 5
- 调试状态下刷新界面
* e (void)[CATransation flush]
查看内存
- ( lldb ) memory read --format x --size 4 0xbffff3c0
- 以16进制格式显示0xbffff3c0开始的内存数据,数据是4个字节为一个单位的
- (lldb)memory read --outfile /tmp/mem.bin --binary 0x1000 0x1200
- 把0x100 到 0x1200的内存数据输出到文件
修改内存
- 在bytes+1的地方写入一个字节的数据:10
- memory write 'bytes + 1' 10
- 在bytes+1的地方写入大小为4字节的数据
- memory write -s 4 'byte + 1' 15
- 在bytes开始的8个字节写入1,2,3,4。每个数据2字节
- memory write -s 2 'byte' 1 2 3 4
寄存器###
- 查看寄存器数据
- register read
- 指定格式查看寄存器内容
- register read --format x
- help format 可以查看相应的格式
- 修改寄存器数据
- register write rax 123
- register write pc '$pc + 8'
- 函数调用约定,返回值放在r0,前面3个参数放在r1 ~ r3 里面
汇编###
- 显示当前函数汇编代码
- disassemble --frame
- dis -f
- 显示指定函数名的汇编代码
- disassemble --name main
- dis -n main
- 显示指定地址范围的汇编代码
- disassemble --start-address 0x1eb8 --end-address 0x1ec3
- 显示当前行的汇编代码
- disassemble --line
- dis -l
- 源代码和汇编代码混合显示
- disassemble --frame --mixed
- dis -f -m
- 显示16进制opcode
- disassemble --frame --bytes
其他
- 初始化时会读配置文件
- ~/.lldbinit
- 可指定别名
- (lldb) command alias bfl breakpoint set -f %1 -l %2 1. (lldb) bfl foo.c 12