Debian上Rust代码如何调试与测试
导读:在 Debian 上调试与测试 Rust 的高效流程 一 环境准备 安装 Rust 工具链:执行命令:curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh,随后执行...
在 Debian 上调试与测试 Rust 的高效流程
一 环境准备
- 安装 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 / rust-lldb
- 启动调试:
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。
- 在
- 集成测试与示例
- 将集成测试放在项目根目录的 tests/ 目录,文件名以
_test.rs结尾;运行:cargo test。 - 示例(examples/)可用
cargo run --example < name>执行,便于端到端验证。
- 将集成测试放在项目根目录的 tests/ 目录,文件名以
- 断言与测试工具
- 常用断言:
assert!、assert_eq!、assert_ne!;可结合测试框架(如 rstest)做参数化与夹具管理,提升覆盖率与可维护性。
- 常用断言:
四 调试与测试的快速示例
- 调试示例
- 代码示例(src/main.rs)
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 常用操作
(gdb) break main (gdb) run (gdb) next (gdb) print x (gdb) backtrace
- 代码示例(src/main.rs)
- 测试示例
- 单元测试(src/lib.rs)
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
- 单元测试(src/lib.rs)
五 常见问题与排查建议
- 断点无法命中或变量不可见:确认使用 调试构建 进行调试;发布构建请开启
debug = true;必要时添加println!/dbg!辅助定位。 - 优化导致单步异常:调试时避免高优化级别;发布构建保留调试符号有助于事后分析。
- 无法打印复杂结构:为类型派生或手动实现 Debug,便于
{ :?}/{ :#?}输出。 - 系统调用/库调用问题:优先用 strace / ltrace 观察执行路径与参数,再回到源码定位。
- 内存错误与泄漏:使用 valgrind 在调试构建下排查;若涉及第三方 C 库,确保对应调试符号可用。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Debian上Rust代码如何调试与测试
本文地址: https://pptw.com/jishu/753608.html
