返回
lldb 常用命令与调试技巧
IOS
2023-11-17 05:19:41
lldb:深入浅出地了解 macOS 调试神器
lldb 是一款功能强大的开源调试工具,内置于 Xcode,旨在助力 macOS 开发者快速定位和调试 bug,无论是在正向开发还是逆向工程中,它都发挥着举足轻重的作用。
lldb 基础
lldb 简化了调试命令,采用头部匹配方式,用户可以随意简化某个命令,只要不造成歧义即可。单步调试通常分为两大类:源码级和汇编级。
源码级调试
源码级调试允许用户逐行执行代码,同时检查变量和寄存器的值。常用的命令包括:
breakpoint set
: 在指定行号处设置断点。breakpoint list
: 列出当前会话中的所有断点。breakpoint disable
: 禁用指定的断点。step
: 单步执行下一条指令。next
: 单步执行到下一行代码。finish
: 单步执行当前函数,直到其返回。continue
: 继续执行程序,直到遇到断点或退出。
汇编级调试
汇编级调试提供了更底层的视图,允许用户检查机器指令和内存值。常用的命令包括:
disassemble
: 反汇编指定的函数或代码范围。register read
: 读取指定寄存器的值。register write
: 写入指定寄存器的值。memory read
: 读取指定内存地址的值。memory write
: 写入指定内存地址的值。
其他有用的命令
除了上述命令之外,lldb 还提供了许多其他有用的命令,包括:
expr
: 计算任意表达式并显示其结果。po
: 打印对象的值,类似于printf
。bt
: 打印调用堆栈。frame select
: 选择要检查的帧。watchpoint set variable
: 设置变量观察点,当变量值改变时触发。
实战案例
反汇编函数并检查寄存器值
(lldb) disassemble main
(lldb) register read eax
设置断点并单步执行
(lldb) breakpoint set --line 23
(lldb) run
(lldb) step
(lldb) next
深入学习资源
常见问题解答
- lldb 与 gdb 有什么区别?
lldb 专门为 macOS 设计,而 gdb 则是一种通用的调试工具。lldb 通常更易用,但功能性上不如 gdb 强大。 - 如何将断点导出为文件?
使用breakpoint write
命令,例如:(lldb) breakpoint write my_breakpoints.txt
- 如何从命令行使用 lldb 调试应用程序?
通过lldb
命令后跟要调试的应用程序路径,例如:$ lldb /path/to/my_app
- 如何检查变量的类型?
使用ptype
命令,例如:(lldb) ptype my_variable
- lldb 支持哪些处理器架构?
lldb 支持 x86、x86-64、ARM 和 ARM64 等常见处理器架构。