首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >告别 println! 调试地狱,macOS Rust 开发者都该学会 rust-lldb

告别 println! 调试地狱,macOS Rust 开发者都该学会 rust-lldb

作者头像
不吃草的牛德
发布2026-06-02 19:41:20
发布2026-06-02 19:41:20
330
举报
文章被收录于专栏:RustRust

你是否也经历过下面这些崩溃时刻:

  • println! 刷满屏幕,却还是找不到那个诡异的 bug
  • • 多线程一跑就乱,dbg! 完全看不出调用顺序
  • • unsafe 代码或者 FFI 调用出问题,cargo expand 也救不了你
  • • macOS 上用 GDB 被 Mach task port 错误支配的恐惧……

被折腾的不行了,换了 gdb,由是是 mac os 系统,后面就换到了 rust-lldb,调试体验直接起飞。

今天这篇教程,专为 macOS Rust 开发者 打造,帮你用 30 分钟入门 rust-lldb,彻底告别使用 println! 调试的时代。

一、mac OS系统上为什么推荐 rust-lldb 而不是 GDB?

  • • GDB 在 macOS 上需要 codesign,权限问题层出不穷
  • • rust-lldb 原生集成 Apple 开发工具链,兼容性更好
  • • Rust 官方维护的 rust-lldb 对 name mangling、pretty printing 支持更完善
  • • 源码路径识别更准确,断点命中率高
  • • 和 VS Code + CodeLLDB 无缝衔接(后面会讲)

在 macOS 上,rust-lldb 就是 Rust 调试的最方便,最快捷的工具。

二、环境准备(5 分钟搞定)

1. 安装 Rust(已安装跳过):

代码语言:javascript
复制
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

2. rust-lldb 通常随 Rust 工具链自带,直接执行:

代码语言:javascript
复制
rust-lldb --version

如果没有,更新工具链即可:

代码语言:javascript
复制
rustup update

三、实战项目:从零调试一个“带 bug”的 Rust 程序

代码语言:javascript
复制
cargo new lldb_demo && cd lldb_demo

src/main.rs 替换成下面这段故意留 bug 的代码:

代码语言:javascript
复制
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 模式):

代码语言:javascript
复制
cargo build

四、启动 rust-lldb 并开始调试

代码语言:javascript
复制
rust-lldb target/debug/lldb_demo

进入 (lldb) 提示符后,按顺序敲下面这些命令:

代码语言:javascript
复制
(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 被漂亮地打印出来,是不是瞬间上头?

五、rust-lldb 核心命令速查表(建议保存)

操作

命令

快捷键/缩写

设置行断点

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 都很香)

代码语言:javascript
复制
(lldb) p my_hashmap
(lldb) p *slice@10      # 查看连续内存

2. 多线程调试

代码语言:javascript
复制
(lldb) thread list
(lldb) thread select 2

3. 进入 panic 时自动断住

代码语言:javascript
复制
(lldb) breakpoint set -n rust_begin_unwind

4. 直接用全路径打断点(源码找不到时救命)

代码语言:javascript
复制
(lldb) b ~/project/lldb_demo/src/main.rs:13

七、强烈推荐:VS Code + CodeLLDB 图形化调试

虽然命令行使用起来比较方案,但是日常开发强烈建议用图形界面,不用记太多命令

  1. 1. 在 VS Code 安装 CodeLLDB 扩展
  2. 2. 创建 .vscode/launch.json
代码语言:javascript
复制
{
    "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 找得快


本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-06-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Rust火箭工坊 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、mac OS系统上为什么推荐 rust-lldb 而不是 GDB?
  • 二、环境准备(5 分钟搞定)
  • 三、实战项目:从零调试一个“带 bug”的 Rust 程序
  • 四、启动 rust-lldb 并开始调试
  • 五、rust-lldb 核心命令速查表(建议保存)
  • 六、进阶技巧(真正拉开差距的地方)
  • 七、强烈推荐:VS Code + CodeLLDB 图形化调试
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档