
在 Rust 开发中,println! 调试虽然简单有效,但遇到复杂逻辑、并发问题、内存布局或 panic 时,调试器才是最实用的调试工具。今天我们来系统介绍两大主流调试器:GDB(GNU Debugger)和 rust-lldb,帮助你高效定位 Bug,提升开发调试效率。
GDB 是 GNU 项目开发的源代码级调试器,支持 C、C++、Rust、Go 等多种语言。它历史悠久、功能也相对比较完备,是 Linux 环境下最常用的调试工具之一。
Rust 中的 GDB 使用
Rust 官方提供了 rust-gdb 包装器,它会自动加载 Python pretty-printers,让 Rust 的 Vec、HashMap、Option、Result 等类型显示更友好(接近于 Rust 语法)。
安装与启动示例(Linux/macOS):
# 编译时带调试信息(默认 debug 模式已包含)
cargo build
# 使用 rust-gdb
rust-gdb target/debug/your_project常用命令速览(在 (gdb) 提示符下):
(gdb) break main.rs:42 # 在某行设置断点
(gdb) run # 运行程序
(gdb) break func_name # 在函数入口断点
(gdb) next / step / finish # 单步
(gdb) print my_var # 打印变量(p)
(gdb) bt # 查看调用栈(backtrace)
(gdb) info locals # 当前帧局部变量
(gdb) continue # 继续执行(c)
(gdb) quitGDB 在 Linux 上对 Rust 支持较好,特别适合需要深入系统层调试(如 unsafe 代码、FFI)的场景。
LLDB 是 LLVM 项目开发的下一代调试器,默认用于 macOS/iOS(Xcode)。它模块化设计、高性能,与 Rust 编译器使用的 LLVM 后端天然契合。
Rust 官方同样提供了 rust-lldb 包装器,增强了对 Rust 语义的支持(如枚举、所有权相关显示)。
启动方式:
rust-lldb target/debug/your_project或直接:
lldb target/debug/your_project # 系统 lldb + Rust 配置常用命令((lldb) 提示符):
(lldb) b main.rs:42 # breakpoint
(lldb) run
(lldb) n / s / finish # next/step
(lldb) p my_var # print
(lldb) bt # backtrace
(lldb) frame variable # 当前帧变量
(lldb) continue
(lldb) settings set target.run-args "arg1 arg2" # 设置运行参数在 macOS 上直接用
rust-lldb通常体验更好。
维度 | GDB (rust-gdb) | LLDB (rust-lldb) |
|---|---|---|
平台偏好 | Linux 最佳 | macOS 最佳 |
Rust 支持 | 优秀(Python pretty printers) | 优秀,部分场景显示更友好 |
生态 | 更成熟,扩展丰富 | LLVM 生态,现代化 |
学习曲线 | 命令类似 | 命令类似 |
IDE 集成 | VS Code + Native Debug | VS Code + CodeLLDB(强烈推荐) |
适用场景 | 系统级、核心 dump、多线程 | macOS 开发、LLVM 相关项目 |
推荐组合:
rust-gdbrust-lldbcargo build(debug 模式),避免 release 的优化导致调试信息丢失。rust-gdb / rust-lldb,否则复杂类型显示为原始内存。main 或关键位置打断点,或用 RUST_BACKTRACE=1 先看栈。info threads(GDB)或 thread list(LLDB)切换线程。掌握 GDB 和 rust-lldb,能让你从“猜 Bug”升级到“定位 Bug”。初学者先熟悉核心命令(break、run、next、print、bt),多实践自然上手。Rust 的调试支持在不断进步,结合现代 IDE,体验已远超早期版本。