
你是否也经历过下面这些崩溃时刻:
println! 刷满屏幕,却还是找不到那个诡异的 bugdbg! 完全看不出调用顺序cargo expand 也救不了你被折腾的不行了,换了 gdb,由是是 mac os 系统,后面就换到了 rust-lldb,调试体验直接起飞。
今天这篇教程,专为 macOS Rust 开发者 打造,帮你用 30 分钟入门 rust-lldb,彻底告别使用 println! 调试的时代。
rust-lldb 对 name mangling、pretty printing 支持更完善在 macOS 上,rust-lldb 就是 Rust 调试的最方便,最快捷的工具。。
1. 安装 Rust(已安装跳过):
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh2. rust-lldb 通常随 Rust 工具链自带,直接执行:
rust-lldb --version如果没有,更新工具链即可:
rustup updatecargo new lldb_demo && cd lldb_demo把 src/main.rs 替换成下面这段故意留 bug 的代码:
fn main() {
let numbers = vec![1, 2, 3, 4, 5];
let sum = sum_vector(&numbers);
println!("Sum is: {}", sum);
}
fn sum_vector(v: &[i32]) -> i32 {
let mut sum = 0;
for i in 0..=v.len() { // 故意越界!
sum += v[i];
}
sum
}编译(必须用 debug 模式):
cargo buildrust-lldb target/debug/lldb_demo进入 (lldb) 提示符后,按顺序敲下面这些命令:
(lldb) b main # 在 main 函数打断点
(lldb) run # 启动程序
# 程序停住后
(lldb) b src/main.rs:13 # 在 sum_vector 函数入口打断点
(lldb) continue # c 继续运行
(lldb) frame variable # fr v 查看所有局部变量
(lldb) p v # 漂亮打印 Vec(Rust pretty printer 自动生效)
(lldb) frame variable v 看到 Vec 被漂亮地打印出来,是不是瞬间上头?



操作 | 命令 | 快捷键/缩写 |
|---|---|---|
设置行断点 | b src/main.rs:15 | b |
设置函数断点 | b sum_vector 或 b crate::sum_vector | - |
运行/重启 | run / r | r |
单步不进函数 | next | n |
单步进入函数 | step | s |
继续运行 | continue | c |
打印变量 | p numbers / print numbers | p |
查看所有局部变量 | frame variable | fr v |
查看调用栈 | bt 或 thread backtrace | bt |
条件断点 | b src/main.rs:18 if i >= v.len() | - |
列出源码 | list src/main.rs:10 | - |
1. 美化打印复杂类型(Vec、HashMap、Option、Result 都很香)
(lldb) p my_hashmap
(lldb) p *slice@10 # 查看连续内存2. 多线程调试
(lldb) thread list
(lldb) thread select 23. 进入 panic 时自动断住
(lldb) breakpoint set -n rust_begin_unwind4. 直接用全路径打断点(源码找不到时救命)
(lldb) b ~/project/lldb_demo/src/main.rs:13虽然命令行使用起来比较方案,但是日常开发强烈建议用图形界面,不用记太多命令。
.vscode/launch.json:{
"version": "0.2.0",
"configurations": [
{
"type": "lldb",
"request": "launch",
"name": "Debug Rust",
"program": "${workspaceFolder}/target/debug/lldb_demo",
"cwd": "${workspaceFolder}",
"sourceMap": {
"/rustc/": "${env:HOME}/.rustup/toolchains"
}
}
]
}点 F5,一键调试,悬停看变量、点击设置断点,用起来非常爽!
从今天开始,少写几个 println!,多用 rust-lldb 练手。你会发现,真正的高手从来不是 bug 写得少,而是 bug 找得快。