在Debian上调试Rust前,需安装必要工具链:
rustup安装最新稳定版,添加~/.cargo/bin到PATH:curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source ~/.cargo/env
gdb(GNU Debugger)或lldb(LLVM Debugger),推荐安装两者以备不同需求:sudo apt update && sudo apt install gdb lldb
rust-src(提供Rust源码)和llvm-tools-preview(支持LLVM工具链):rustup component add rust-src llvm-tools-preview
调试时需保留符号表和调试信息,避免使用--release模式(除非需性能分析):
cargo build # 默认生成带调试信息的可执行文件(target/debug/your_project)
若需发布模式但保留调试信息,可在Cargo.toml中配置:
[profile.release]
debug = true # 保留调试符号
Rust提供了针对gdb/lldb的包装器,自动加载Rust调试信息,提升体验:
rust-gdb target/debug/your_project # 使用GDB
rust-lldb target/debug/your_project # 使用LLDB
break <函数名/文件:行号>:设置断点(如break main或break src/main.rs:10);next(n):单步执行(不进入函数);step(s):单步执行(进入函数);continue(c):继续执行至下一个断点;print <变量名>(p):打印变量值(如print x);backtrace(bt):查看调用栈(定位崩溃位置);frame <编号>:切换调用栈帧(查看不同层级的变量)。println!("{:?}", 变量):打印变量值(需手动添加,适合简单调试);dbg!(变量):更便捷的打印方式,自动输出变量值、文件名及行号(如dbg!(x));println!("{:#?}", 结构体):美化打印结构体(显示层级结构)。RUST_BACKTRACE环境变量:RUST_BACKTRACE=1 cargo run # 临时启用
RUST_BACKTRACE=full cargo run # 显示完整回溯(包括所有帧)
sudo apt install valgrind
valgrind --tool=memcheck target/debug/your_project
log+env_logger记录程序运行日志(适合复杂项目):use log::{info, error};
fn main() {
env_logger::init(); // 初始化日志
info!("Program started"); // 记录info日志
error!("Something went wrong!"); // 记录error日志
}
运行时设置日志级别:RUST_LOG=info cargo run # 显示info及以上级别日志
rust-analyzer(代码补全)和CodeLLDB(调试)扩展,通过内置调试面板设置断点、查看变量;glibc版本不兼容导致的问题(如服务器环境),在.cargo/config.toml中配置:[target.x86_64-unknown-linux-gnu]
rustflags = ["-C", "target-feature=+crt-static"]
然后编译:cargo build --release
cargo deb打包Debian软件包,默认会剥离调试符号。可通过以下方式保留:
Cargo.toml中设置[profile.release].debug = true;cargo deb --separate-debug-symbols将调试符号打包为单独文件(便于后续调试)。cargo-watch在文件修改时自动重新编译并运行(加速迭代调试):cargo install cargo-watch
cargo watch -x run # 监听文件变化并运行