
LLDB 是 macOS 上默认的调试器,作为 LLVM 项目的一部分,它与 Clang 编译器高度集成,是 C++ 开发者在 macOS 平台进行调试的首选工具。相比 GDB,LLDB 在苹果生态中更稳定、响应更快,支持现代 C++ 特性,并深度整合 Xcode 和命令行工作流。
编译时启用调试信息
要使用 LLDB 调试 C++ 程序,必须在编译时加入调试符号。使用 -g 标志让编译器生成调试信息:
clang++ -g -std=c++17 main.cpp -o myapp
这样生成的可执行文件 myapp 就包含了变量名、行号等信息,LLDB 才能准确断点和查看变量。
启动并运行 LLDB
使用以下命令启动调试会话:
立即学习“C++免费学习笔记(深入)”;
lldb myapp
进入交互界面后,输入 run(或简写 r)来执行程序:
(lldb) run (lldb) run arg1 arg2 # 带参数运行
设置断点
断点是调试的核心功能。你可以按文件行号或函数名设置断点:
- breakpoint set –file main.cpp –line 10:在指定文件第 10 行设断点
- b main.cpp:15:简写方式
- b calculateSum:在函数入口处设断点
- br li:列出当前所有断点
控制程序执行
程序暂停后,可用以下命令逐步执行:
- next(n):单步执行,跳过函数调用
- step(s):进入函数内部
- continue(c):继续运行直到下一个断点
- finish:运行完当前函数并返回
查看变量和表达式
使用 frame variable 或简写 fr v 查看当前作用域的变量:
(lldb) fr v (int) x = 5 (std::String) name = “test”
也可以打印具体变量或表达式:
(lldb) expr x + 1 (int) $0 = 6 (lldb) p name.c_str() (const char *) $1 = 0x000000010050dc98 “test”
检查调用栈
当程序中断时,使用以下命令分析调用流程:
- bt:显示当前调用栈(backtrace)
- frame select 2:切换到第 3 个栈帧(从 0 开始)
- fr v:查看该帧中的局部变量
附加到正在运行的进程
若程序已运行,可通过进程 ID 调试:
lldb -p 12345
或者在 LLDB 中使用:
(lldb) process attach –pid 12345
结合 VS Code 使用 LLDB
在 VS Code 中安装 C/C++ 插件后,配置 launch.json 即可图形化使用 LLDB:
“type”: “lldb”, “request”: “launch”, “name”: “Debug”, “program”: “${workspaceFolder}/myapp”, “args”: [], “stopAtEntry”: false, “cwd”: “${workspaceFolder}”
这样就能通过界面操作断点、变量监视和调用栈浏览。
基本上就这些。LLDB 功能强大且响应迅速,掌握基本命令后,C++ 调试效率会大幅提升。macos 下无需额外配置,开箱即用,是 Clang 工具链的理想搭档。