1. 使用专用调试工具:rust-gdb与rust-lldb
Rust提供了rust-gdb(GDB包装器)和rust-lldb(LLDB包装器),专门针对Rust代码优化,能自动加载调试符号、识别Rust语法(如结构体、枚举),简化调试流程。安装LLDB/GDB后(如sudo apt install lldb gdb),通过以下命令启动:
rust-gdb target/debug/your_program # 启动GDB调试
rust-lldb target/debug/your_program # 启动LLDB调试
常用命令:break main(设置断点)、run(启动程序)、next(逐行执行)、step(进入函数)、print variable_name(查看变量值)、backtrace(查看调用栈)。
2. 利用日志宏输出调试信息
println!/dbg!]宏:println!("变量值: {}", variable)是最基础的调试方式,适合快速输出关键变量;dbg!(variable)更强大,会打印变量名、值及所在文件行号(如[src/main.rs:2] variable = 42),且不会影响生产代码(需移除或注释)。log+env_logger组合实现分级日志(如info、error、debug)。在Cargo.toml中添加依赖:[dependencies]
log = "0.4"
env_logger = "0.9"
初始化日志(main.rs):env_logger::init();,通过RUST_LOG=info cargo run控制日志级别。3. IDE集成调试(以Visual Studio Code为例)
安装rust-analyzer扩展(提供Rust语法支持),创建.vscode/launch.json配置文件:
{
"version": "0.2.0",
"configurations": [
{
"type": "lldb",
"request": "launch",
"name": "Debug Rust",
"program": "${workspaceFolder}/target/debug/your_program",
"args": [],
"cwd": "${workspaceFolder}"
}
]
}
配置完成后,点击编辑器左侧的“调试图标”,选择“Debug Rust”即可启动调试会话,支持断点设置、变量监视、调用栈查看等功能。
4. 断言与测试框架
assert!(condition)(条件为假时panic)、assert_eq!(a, b)(比较两个值是否相等)、debug_assert!(condition)(仅在开发模式生效,不影响生产代码)检查程序逻辑。例如:fn add(a: i32, b: i32) -> i32 {
assert_eq!(a + b, 5, "加法结果错误"); // 自定义错误信息
a + b
}
#[test]属性标记测试函数,使用cargo test运行。例如:#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_add() {
assert_eq!(add(2, 3), 5);
}
}
测试失败时会输出详细的错误信息,帮助快速定位问题。5. 内存调试与性能分析
valgrind --tool=memcheck target/debug/your_program
输出结果会显示内存错误的位置(如“definitely lost”表示确定的内存泄漏)。cargo bench(基准测试)或criterion库(更详细的性能分析)找出性能瓶颈。例如,添加criterion依赖后,编写基准测试:use criterion::{criterion_group, criterion_main, Criterion};
fn bench_add(c: &mut Criterion) {
c.bench_function("add", |b| b.iter(|| add(2, 3)));
}
criterion_group!(benches, bench_add);
criterion_main!(benches);
运行cargo bench生成性能报告。6. 高级编译选项
使用rustc的-Z标志开启高级调试功能,例如-Z verbose输出更详细的编译信息(帮助理解编译器处理过程),-Z backtrace在程序崩溃时生成完整的调用回溯。在Cargo.toml的[profile.dev]部分添加:
[profile.dev]
debug = true
rustflags = ["-Z", "backtrace"]
运行程序时,崩溃会输出调用栈信息,便于定位崩溃位置。