LLDB基础
LLDB 基础使用指南
1. 准备工作:编译时添加调试信息
要使用 LLDB 调试程序,必须在编译时生成调试符号。在 GCC 或 Clang 中,添加 -g 选项:
1 | g++ main.cc -g -o main |
2. 启动 LLDB
有两种方式启动调试:
直接加载程序:
1
lldb main
先启动 lldb,再加载程序:
1
2lldb
(lldb) file main
3. 程序执行控制
| 命令 | 缩写 | 说明 |
|---|---|---|
run |
r |
启动程序,程序会在断点处暂停 |
next |
n |
单步执行(不进入函数内部) |
step |
s |
单步执行(进入函数内部) |
finish |
执行完当前函数,返回到调用处 | |
continue |
c |
继续执行,直到下一个断点或程序结束 |
4. 查看和修改变量
| 命令 | 说明 |
|---|---|
print <变量名> 或 p <变量名> |
打印变量的值 |
po <指针变量名> |
打印 Objective-C / Swift 对象描述(也可用于 C++ 对象,若重载了 description) |
frame variable |
查看当前栈帧中的所有局部变量 |
expression <变量名> = <新值> |
修改变量的值 |
print /<格式> <变量名> |
按指定格式输出:/t 二进制/o 八进制/d 十进制/x 十六进制 |
示例:
1 | (lldb) p count |
5. 查看源码
| 命令 | 说明 |
|---|---|
list |
显示当前暂停位置附近的源代码(默认10行) |
list <行号> |
显示指定行附近的代码 |
list <文件名>:<行号> |
显示指定文件指定行附近的代码 |
list <函数名> |
显示指定函数的代码 |
示例:
1 | (lldb) list 15 # 显示第15行附近的代码 |
6. 断点管理
设置断点
| 命令 | 说明 |
|---|---|
breakpoint set --name <函数名> |
在函数入口处设置断点 |
breakpoint set --line <行号> |
在当前文件指定行设置断点 |
breakpoint set --file <文件名> --line <行号> |
在指定文件的指定行设置断点 |
breakpoint set --name <正则表达式> --func-regex |
使用正则匹配函数名设置断点 |
示例:
1 | (lldb) breakpoint set --name main |
管理断点
| 命令 | 说明 |
|---|---|
breakpoint list |
列出所有断点(显示序号及状态) |
breakpoint delete |
删除所有断点 |
breakpoint delete <序号> |
删除指定序号的断点 |
breakpoint delete <序号1> <序号2> ... |
删除多个断点 |
breakpoint delete <起始序号>-<结束序号> |
删除一段范围内的断点(包括两端) |
breakpoint disable <序号> |
禁用指定断点(不删除,可重新启用) |
breakpoint enable <序号> |
启用被禁用的断点 |
示例:
1 | (lldb) breakpoint list |
7. 退出调试
| 命令 | 说明 |
|---|---|
quit 或 exit |
退出 LLDB |
8. 其他常用命令
thread backtrace(简写bt):查看当前线程的调用栈。frame select <序号>:切换到指定栈帧。help:查看帮助信息,例如help breakpoint查看断点相关命令。register read:查看寄存器值。
提示:
- 大多数命令都有缩写形式,如上表所示,可提高调试效率。
- LLDB 支持命令补全,按
Tab键可自动补全命令或参数。- 若使用 LLDB 调试 C++ 程序,
po命令对没有 Objective-C 运行时支持的对象可能输出地址,此时可使用p查看原始值。
掌握以上基础命令,即可开始使用 LLDB 进行简单的程序调试。更高级的功能(如条件断点、内存查看、脚本支持等)可查阅官方文档或通过 help 命令学习。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 tsengcode!



