1. 使用println!/dbg!宏进行基础调试
println!("Debug message: {}", variable)是最传统的调试方式,通过在代码中插入宏输出变量值或执行流程,帮助定位问题。dbg!(variable)是Rust 1.34+引入的增强版宏,会自动打印变量值、文件名及行号(如src/main.rs:2:14: 2:15 x = 5),无需手动拼接字符串,更适合快速调试。
2. 使用GDB/LLDB命令行调试器
GDB(GNU Debugger)和LLDB(LLVM Debugger)是Linux下通用的调试工具,支持Rust程序的深度分析。需先构建包含调试信息的二进制文件(cargo build,默认包含debug符号),再通过以下命令启动:
gdb target/debug/your_program,常用命令包括break main(设置断点)、run(启动程序)、next(逐行执行,跳过函数)、step(进入函数)、print variable(查看变量值)、backtrace(查看调用堆栈)。lldb target/debug/your_program,常用命令与GDB类似,如b main(设置断点)、r(运行)、n(下一步)、s(进入函数)、p variable(打印变量)。rust-lldb包装器),支持Rust特有的数据结构(如Option<T>、Vec、HashMap)的美化打印,更贴合Rust开发需求。3. 使用Rust专用调试工具(rust-gdb/rust-lldb)
rust-gdb和rust-lldb是Rust官方提供的调试器包装器,自动加载Rust调试信息,无需额外配置。启动方式:
rust-gdb target/debug/your_program(基于GDB)rust-lldb target/debug/your_program(基于LLDB)4. IDE集成调试(Visual Studio Code/IntelliJ IDEA)
现代IDE通过插件提供图形化调试界面,简化操作:
rust-analyzer插件,在项目根目录创建.vscode/launch.json文件,配置调试参数(如程序路径、参数、工作目录),点击调试面板即可启动调试会话,支持断点设置、变量监视、单步执行等功能。Rust插件,内置调试工具,支持Rust项目的全生命周期调试,包括断点、变量查看、表达式求值等。5. 日志与断言
println!("Debug info: {:?}", variable)或第三方日志库(如log、env_logger)输出详细日志,帮助追踪程序执行流程和变量状态。assert!(condition)(条件为假时触发panic)、assert_eq!(expected, actual)(检查相等性)、unwrap()/expect()(处理Result/Option类型,失败时打印错误信息)快速发现逻辑错误。例如,let value = result.expect("Failed to get value")会在result为Err时打印错误信息并终止程序。6. 内存调试工具(Valgrind)
Valgrind是强大的内存调试工具,可用于检测内存泄漏、非法内存访问等问题。使用命令:valgrind --tool=memcheck target/debug/your_program,它会分析程序的内存使用情况,输出内存错误信息(如未释放的内存、越界访问),帮助定位内存相关bug。
7. 测试框架调试
Rust内置cargo test框架,支持单元测试和集成测试。通过#[test]属性标记测试函数,使用assert_eq!/assert_ne!/assert!(condition)等宏验证预期结果。调试测试时,可在测试函数中插入println!/dbg!宏,或使用cargo test -- --nocapture显示测试输出,帮助定位测试失败原因。
8. 高级调试技巧(LLDB)
br set -f main.rs -l 10 -c "x > 5"(在main.rs第10行设置断点,仅当x > 5时触发)。p *boxed_value(查看Box<T>的内容)、p rc_value.strong_count(查看Rc<T>的引用计数)。p future_variable(查看Future的状态)、p task_handle(查看任务的状态)。