Ubuntu 下 Rust 调试技巧
一 环境准备与符号配置
sudo apt-get install gdb lldbrustup component add rust-src llvm-tools-previewrust-gdb/rust-lldb 获得更好的 Rust 语法与类型支持[profile.dev] debug = true[profile.release] debug = truecargo build(产物在 target/debug/)gdb target/debug/your_binary 或 rust-gdb target/debug/your_binary二 命令行调试要点 GDB 与 LLDB
break src/main.rs:10(LLDB:breakpoint set -f src/main.rs -l 10)run / continue(LLDB:run / continue)step / next(LLDB:step / next)print my_var 或 print expr(LLDB:frame variable my_var / expression expr)backtrace(LLDB:bt)info locals(LLDB:frame variable)print &var 查看地址与状态RUSTFLAGS="-Z sanitizer=address"),编译后用 GDB 运行handle SIGSEGV stop nopass,便于中断查看现场与调用栈三 IDE 与远程调试 VSCode
.vscode/launch.json 示例:
{"version":"0.2.0","configurations":[{"name":"Debug Rust","type":"lldb","request":"launch","program":"${workspaceFolder}/target/debug/your_binary","args":[],"cwd":"${workspaceFolder}","preLaunchTask":"cargo build"}]}launch.json 进行断点、变量查看与单步调试,所有构建与运行均在远程完成四 快速诊断与辅助工具
println!("{:?}", x) 或美化输出 println!("{:#?}", x)dbg!(&x) 快速打印带文件与行号的表达式值Debug:#[derive(Debug)]valgrind --tool=memcheck ./your_binary)定位越界、释放后使用与泄漏cargo objdump -d 查看反汇编,cargo size 检查段大小,cargo readobj 查看文件头信息,辅助定位链接与优化相关问题