1. 准备工作:安装调试工具与构建带调试信息的程序
在Ubuntu上调试Rust代码前,需先安装调试工具并确保程序包含调试符号(用于显示变量名、行号等信息)。
sudo apt install gdb lldb  # 同时安装GDB和LLDB
cargo build  # 默认生成带调试信息的可执行文件(位于target/debug/目录)
--debug参数(Rust 1.70+支持):cargo build --release --debug
2. 使用GDB调试Rust程序
GDB是GNU项目的经典调试器,支持Rust程序的基础调试功能。
rust-gdb(Rust封装的工具,自动加载Rust符号)或直接使用GDB启动程序:rust-gdb target/debug/your_program  # 推荐:自动识别Rust源码和调试信息
# 或
gdb target/debug/your_program
break main:在main函数入口设置断点;break src/main.rs:10:在src/main.rs第10行设置断点;run:启动程序,运行至断点处暂停;next(或n):逐行执行(跳过函数调用);step(或s):逐过程执行(进入函数内部);print variable_name(或p variable_name):查看变量值;backtrace(或bt):查看函数调用栈;quit:退出GDB。3. 使用LLDB调试Rust程序
LLDB是LLVM项目的高性能调试器,Rust官方推荐的首选工具,支持更现代的调试特性。
rust-lldb(Rust封装的工具)或直接使用LLDB启动程序:rust-lldb target/debug/your_program  # 推荐:自动加载Rust调试信息
# 或
lldb target/debug/your_program
breakpoint set --name main:在main函数设置断点;breakpoint set --file src/main.rs --line 10:在src/main.rs第10行设置断点;run:启动程序;next(或n):逐行执行;step(或s):进入函数;frame variable:查看当前栈帧的所有变量;print variable_name(或p variable_name):查看变量值;bt:查看调用栈;quit:退出LLDB。4. 使用Visual Studio Code(VS Code)集成调试
VS Code通过rust-analyzer扩展和launch.json配置,提供图形化调试界面,适合新手和高效开发。
rust-analyzer(Rust官方推荐的代码分析工具)。launch.json:在项目根目录创建.vscode/launch.json文件,添加以下配置(以LLDB为例):{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "lldb",
      "request": "launch",
      "name": "Debug Rust Program",
      "program": "${workspaceFolder}/target/debug/your_program",  // 可执行文件路径
      "args": [],  // 程序运行参数(如["arg1", "arg2"])
      "cwd": "${workspaceFolder}",  // 工作目录
      "sourceLanguages": ["rust"]  // 指定源码语言
    }
  ]
}
F5启动调试,程序会在断点处暂停;5. 使用日志与断言辅助调试
除专业调试器外,可通过日志输出和断言快速定位问题。
println!/dbg!/log宏:
println!("变量值: {}", variable):简单输出变量值(适合快速检查);dbg!(variable):输出变量值及文件名、行号(更便捷,推荐使用);log::info!("状态: {:?}", state):结合env_logger库记录结构化日志(适合复杂项目)。RUST_BACKTRACE环境变量查看完整调用栈:RUST_BACKTRACE=1 cargo run  # 显示完整回溯信息
if let Err(e) = your_function() {
    eprintln!("Error: {:?}", e);
    std::process::exit(1);
}
6. 专用Rust调试工具
Rust社区提供rust-gdb和rust-lldb工具,封装了标准调试器的Rust支持,简化了调试流程:
rust-gdb:基于GDB,自动加载Rust源码和调试符号,无需手动配置;rust-lldb:基于LLDB,提供更现代化的调试体验(如更好的Rust语法支持)。gdb或lldb替换为rust-gdb/rust-lldb即可。