Rust如何在Debian中进行调试
导读:在 Debian 上调试 Rust 的实用指南 一 环境准备 安装 Rust 工具链(推荐 rustup): 执行:curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs |...
在 Debian 上调试 Rust 的实用指南
一 环境准备
- 安装 Rust 工具链(推荐 rustup):
- 执行:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh - 使能工具链:
source $HOME/.cargo/env
- 执行:
- 安装调试器与 Rust 增强组件:
sudo apt update & & sudo apt install gdb lldbrustup component add rust-src llvm-tools-preview
- 建议始终使用 debug 构建 进行调试(默认不带优化,便于断点与变量查看):
cargo build或cargo run。
二 使用 GDB 或 LLDB 命令行调试
- 启动调试会话:
- GDB:
rust-gdb target/debug/your_program - LLDB:
rust-lldb target/debug/your_program
- GDB:
- 常用调试命令(GDB 与 LLDB 命令相近):
- 断点:
break main或break your_crate::your_function - 继续执行:
continue - 单步步入/步过:
step/next - 打印变量:
print variable_name - 查看调用栈:
backtrace(缩写bt) - 条件断点:
break your_function if variable_name == 42
- 断点:
- 崩溃时获取回溯:
- 运行前导出:
RUST_BACKTRACE=1 cargo run - 或运行后:
RUST_BACKTRACE=1 ./target/debug/your_program
- 运行前导出:
- 提示:若需调试已运行进程,可用
gdb -p < PID>附加。
三 使用 VS Code 进行图形化调试
- 安装扩展:
- rust-analyzer(语言支持)
- CodeLLDB(调试器)
- 配置
.vscode/launch.json(示例,使用 GDB):- 将
your_program_name替换为实际二进制名(Cargo 默认与 crate 同名) - 示例:
{ "version": "0.2.0", "configurations": [ { "type": "cppdbg", "request": "launch", "name": "Debug", "program": "${ workspaceFolder} /target/debug/your_program_name", "args": [], "stopAtEntry": false, "cwd": "${ workspaceFolder} ", "environment": [], "externalConsole": false, "MIMode": "gdb", "miDebuggerPath": "/usr/bin/gdb", "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true } ], "preLaunchTask": "cargo build" } ] }
- 将
- 如需在启动前自动构建,可添加
.vscode/tasks.json的cargo build任务(label 与preLaunchTask一致)。
四 辅助工具与技巧
- 快速打印与日志:
println!("{ :?} ", value)、println!("{ :#?} ", value)(需#[derive(Debug)])dbg!(value)快速输出值与位置- 使用
log+env_logger并运行:RUST_LOG=info cargo run
- 系统/库调用跟踪:
- 系统调用:
strace -p < PID>或strace -e trace=open,read,write -p < PID> - 库函数调用:
ltrace -p < PID>
- 系统调用:
- 内存错误与泄漏检测:
- Valgrind:
sudo apt install valgrind,运行:valgrind --tool=memcheck target/debug/your_program
- Valgrind:
- 自动重建与运行(便于迭代调试):
cargo install cargo-watchcargo watch -x run
- 提示:Valgrind 对 jemalloc 等自定义分配器支持有限,必要时在
Cargo.toml的[profile.dev]中使用标准库分配器进行对比排查。
五 打包与发布时的调试符号处理
- 在发布包中保留调试符号,便于后续
gdb/lldb分析:- 方法一:在
Cargo.toml中启用 release 调试信息[profile.release] debug = true - 方法二:使用 cargo-deb 将调试符号分离打包
- 安装:
cargo install cargo-deb - 构建:
cargo deb --separate-debug-symbols
- 安装:
- 方法一:在
- 说明:默认情况下,
cargo deb打包的二进制会剥离调试符号,分离后更易在调试环境中使用。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Rust如何在Debian中进行调试
本文地址: https://pptw.com/jishu/766994.html
