在 Debian 上调试与测试 Rust 的高效流程
一 环境准备
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh,随后执行 source $HOME/.cargo/env 使环境变量生效。为获得更好的调试体验,建议安装 Rust 调试组件:rustup component add rust-src llvm-tools-preview。在 Debian 上安装系统级调试器:sudo apt update && sudo apt install gdb lldb。这些组件将提供对 Rust 友好的堆栈、变量与类型显示能力。二 调试方法与常用工具
cargo build(默认包含调试信息),便于断点与变量检查。Cargo.toml 的 [profile.release] 中设置 debug = true,发布时也可获得调试符号,便于线上问题定位:cargo build --release。rust-gdb target/debug/your_project 或 rust-lldb target/debug/your_project。break main 或 break your_crate::func 设置断点;step/next 单步进入/跳过;continue 继续;print var 或 frame variable 查看变量;backtrace(或 bt)查看调用栈;条件断点:break your_function if x == 42。println!("{:?}", x)、println!("{:#?}", x) 美化输出;dbg!(&x) 快速打印带文件与行号的值。log + env_logger,运行时设置 RUST_LOG=info cargo run 输出运行轨迹。strace -p <PID> 或 strace -e trace=open,read,write -p <PID> 定位 I/O 与系统调用问题。ltrace -p <PID> 跟踪动态库调用。valgrind --tool=memcheck target/debug/your_program 检测非法内存访问与泄漏(注意:对高度优化/内联代码支持有限,优先在调试构建下使用)。cargo-watch -x run 监听文件变更并自动构建运行,加速迭代调试。三 测试流程与常用命令
src/lib.rs 或 src/main.rs 中使用 #[cfg(test)] mod tests { #[test] fn test_name() { ... } } 编写测试。cargo test;查看测试输出(例如 println! 日志):cargo test -- --nocapture。_test.rs 结尾;运行:cargo test。cargo run --example <name> 执行,便于端到端验证。assert!、assert_eq!、assert_ne!;可结合测试框架(如 rstest)做参数化与夹具管理,提升覆盖率与可维护性。四 调试与测试的快速示例
fn add(a: i32, b: i32) -> i32 { a + b }
fn main() {
let x = 10;
let y = 20;
let z = add(x, y);
dbg!(&z); // 调试输出
}
cargo build
rust-gdb target/debug/your_project
(gdb) break main
(gdb) run
(gdb) next
(gdb) print x
(gdb) backtrace
pub fn add(a: i32, b: i32) -> i32 { a + b }
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_add() {
assert_eq!(add(1, 2), 3);
assert_eq!(add(-1, 1), 0);
}
}
cargo test -- --nocapture
五 常见问题与排查建议
debug = true;必要时添加 println!/dbg! 辅助定位。{:?}/{:#?} 输出。