以下是在Debian上调试Rust程序的常用技巧:
-
基础打印调试
- 使用
println!("{:?}", variable)打印变量内容,{:#?}可美化输出(需为结构体实现Debug特征)。 dbg!宏可快速打印变量值及位置信息,支持表达式和结构体。
- 使用
-
实现Debug特征
- 为自定义结构体/枚举派生
Debug,或手动实现fmt::Debug以控制输出格式。 - 使用
#[cfg_attr(debug_assertions, derive(Debug))]在调试模式下自动启用Debug。
- 为自定义结构体/枚举派生
-
使用调试器
- Rust GDB/LLDB:
- 安装后通过
rust-gdb或rust-lldb启动调试会话,支持设置断点、单步执行、查看变量等操作。 - 常用命令:
break(设置断点)、next/step(单步执行)、print(查看变量)、backtrace(查看调用栈)。
- 安装后通过
- 条件断点:
break file.rs:10 if x > 5(仅在满足条件时中断)。
- Rust GDB/LLDB:
-
调试符号管理
- 开发阶段在
Cargo.toml中设置[profile.dev] debug = true保留调试符号。 - 发布时可通过
cargo deb --separate-debug-symbols将符号单独打包。
- 开发阶段在
-
静态编译(避免库依赖问题)
- 在
.cargo/config.toml中配置rustflags = ["-C", "target-feature=+crt-static"],生成静态链接二进制文件。
- 在
-
内存与性能调试
- 使用
valgrind --tool=memcheck检测内存泄漏或非法访问。 - 通过
RUST_BACKTRACE=1获取程序崩溃时的调用栈回溯。
- 使用
-
IDE集成调试
- 在VS Code中安装
rust-analyzer,配置launch.json后可直接在编辑器中设置断点、查看变量。
- 在VS Code中安装
以上技巧可根据具体场景选择,基础调试优先使用println!/dbg!,复杂场景结合调试器或静态编译分析[1,2,3,4,5,6,7,8,9,10,11]。