Rust语言在Debian如何调试
小樊
40
2025-12-21 00:03:36
在 Debian 上调试 Rust 的实用指南
一 环境准备
- 安装调试器与语言工具:在 Debian 上安装 gdb 或 lldb,以及 Rust 的调试增强组件。建议使用 rustup 管理工具链,并添加 rust-src 与 llvm-tools-preview 以获得更好的源码级调试与格式化支持。
- 安装命令示例:
- sudo apt update && sudo apt install -y gdb lldb
- rustup component add rust-src llvm-tools-preview
- 建议始终使用 debug 构建 进行调试(默认不带优化,符号更完整):cargo build
- 若需使用 rust-gdb/rust-lldb 包装器,可直接调用它们启动调试会话,其对 Rust 类型与打印更友好。
二 命令行调试步骤
- 编译与启动:
- 使用 GDB:rust-gdb target/debug/your_program
- 使用 LLDB:rust-lldb target/debug/your_program
- 常用调试命令(在 GDB/LLDB 中均可使用相应语法):
- 设置断点:break main 或 break your_crate::your_function
- 单步与跳过:step(步入)、next(步过)
- 继续执行:continue
- 打印变量:print variable_name
- 查看调用栈:backtrace(可简写为 bt)
- 条件断点:break your_function if variable_name == 42
- 崩溃时获取回溯:在运行或调试前设置环境变量 RUST_BACKTRACE=1,可打印完整调用栈,便于定位 panic 位置。
三 图形化与 IDE 调试
- Visual Studio Code
- 安装扩展:rust-analyzer(语言支持)与 CodeLLDB(调试器)。
- 配置 launch.json(使用 CodeLLDB 示例):
{
“version”: “0.2.0”,
“configurations”: [
{
“type”: “lldb”,
“request”: “launch”,
“name”: “Debug”,
“program”: “${workspaceFolder}/target/debug/your_program_name”,
“args”: [],
“cwd”: “${workspaceFolder}”,
“preLaunchTask”: “cargo build”
}
]
}
- 其他 IDE
- CLion:内置 Cargo 项目调试支持,开箱即用。
- IntelliJ IDEA:安装 Rust 插件后可配置调试。
四 内存与性能问题排查
- 内存错误与泄漏检测
- 使用 Valgrind(memcheck)定位非法内存访问与泄漏(更适合 debug 构建):
- sudo apt install -y valgrind
- valgrind --tool=memcheck target/debug/your_program
- 注意:Valgrind 并非专为 Rust 设计,某些优化/抽象可能影响结果,但对基础内存错误非常有效。
- 核心转储分析
- 启用 core 文件:ulimit -c unlimited
- 程序崩溃后使用 GDB 分析:gdb target/debug/your_program core
- 在容器或受限环境中,可能需要调整 /proc/sys/kernel/yama/ptrace_scope 以允许附加调试。
- 日志与快速迭代
- 使用 log crate 与 env_logger 输出结构化日志:RUST_LOG=info cargo run
- 使用 cargo-watch 自动重建运行:cargo install cargo-watch && cargo watch -x run。
五 打包与发布场景的调试
- 构建 Debian 包时默认会剥离调试符号。为便于现场或线上问题定位,可在 Cargo.toml 中开启 release 的调试信息,或使用打包工具保留符号:
- 保留 release 调试信息:
[profile.release]
debug = true
- 使用 cargo-deb 将调试符号分离打包,发布时便于符号服务器归档与后续分析。