在Ubuntu上调试Rust项目前,需先安装必要的工具链:
rustup安装Rust(若未安装),命令:curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh,安装后执行source $HOME/.cargo/env配置环境变量。sudo apt install gdb lldb。rust-src(提供Rust源码支持)和llvm-tools-preview(增强LLDB对Rust的支持),命令:rustup component add rust-src llvm-tools-preview。调试需要程序包含调试符号(变量名、行号等信息),默认情况下cargo build会生成带调试信息的可执行文件(位于target/debug/目录)。若需明确指定,可使用:
cargo build # 默认生成带调试信息的二进制文件
# 或显式指定--debug(效果与默认相同)
cargo build --debug
注意:若使用cargo build --release,会优化代码并移除调试信息,不利于调试。
GDB是传统的命令行调试工具,适合习惯终端操作的用户:
gdb target/debug/your_program(your_program为可执行文件名)。main.rs第10行设置断点:break main.rs:10;或在main函数入口设置断点:break main。run(或简写r)启动程序,若需传递命令行参数,可追加在run后,如run arg1 arg2。next(或n):逐行执行,跳过函数调用;step(或s):逐过程执行,进入函数内部。print variable_name(或p variable_name)查看变量值,例如print x。backtrace(或bt)查看函数调用链,定位问题发生的上下文。quit(或q)。LLDB是LLVM生态的调试器,性能更优,适合需要更强大功能的场景:
lldb target/debug/your_program。breakpoint set --name main(在main函数设置断点)或breakpoint set --file main.rs --line 10(在main.rs第10行设置断点)。run(或r)启动程序。next(或n):逐行执行,跳过函数调用;step(或s):逐过程执行,进入函数内部。frame variable variable_name(或fr v variable_name)查看当前栈帧的变量值。thread backtrace(或bt)查看调用链。quit(或q)。Rust提供了rust-gdb和rust-lldb,是对GDB/LLDB的封装,自动加载Rust调试信息(如类型信息、宏展开),提升调试体验:
rust-gdb target/debug/your_program。rust-lldb target/debug/your_program。VS Code是Rust开发的高效IDE,通过插件可实现图形化调试:
rust-analyzer(Rust语言支持)和CodeLLDB(LLDB集成)。.vscode/launch.json文件,添加以下配置(针对your_program):{
"version": "0.2.0",
"configurations": [
{
"type": "lldb",
"request": "launch",
"name": "Debug Rust",
"program": "${workspaceFolder}/target/debug/your_program",
"args": [],
"cwd": "${workspaceFolder}"
}
]
}
F5),选择“Debug Rust”配置,即可启动调试。可通过点击行号设置断点,使用调试工具栏(继续、单步、查看变量等)进行调试。println!("变量值: {:?}", variable)打印变量值(适合简单调试);或使用log库(更专业的日志管理),需在Cargo.toml中添加依赖:log = "0.4"、env_logger = "0.9",并在main.rs中初始化:env_logger::init();,然后使用info!("程序启动")等宏输出日志。assert!(条件)(判断条件是否为真)、assert_eq!(a, b)(判断a与b是否相等)等断言宏,在代码中设置检查点,若断言失败会触发panic,快速定位问题。#[cfg(test)]模块),使用assert_eq!(函数调用, 预期结果)验证函数逻辑,通过cargo test运行测试,避免重复调试。以上方法覆盖了Ubuntu下Rust项目的常用调试场景,可根据需求选择命令行工具(GDB/LLDB)或图形化工具(VS Code),结合辅助技巧提升调试效率。