温馨提示×

Ubuntu下Rust调试技巧有哪些

小樊
42
2026-01-01 05:14:52
栏目: 编程语言

Ubuntu 下 Rust 调试技巧

一 环境准备与符号配置

  • 安装调试器与 Rust 增强组件:
    • 安装 GDB/LLDB:sudo apt-get install gdb lldb
    • 安装 Rust 调试与源码支持:rustup component add rust-src llvm-tools-preview
    • 可选:使用增强前端 rust-gdb/rust-lldb 获得更好的 Rust 语法与类型支持
  • 生成调试符号:
    • 开发版默认已开启,确保 Cargo.toml[profile.dev] debug = true
    • 需要在发布版也保留符号时,设置 [profile.release] debug = true
  • 构建与启动:
    • 调试构建:cargo build(产物在 target/debug/
    • 进入调试:gdb target/debug/your_binaryrust-gdb target/debug/your_binary

二 命令行调试要点 GDB 与 LLDB

  • 常用 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_varprint expr(LLDB:frame variable my_var / expression expr
    • 调用栈:backtrace(LLDB:bt
    • 查看局部变量:info locals(LLDB:frame variable
  • 观察所有权与借用:
    • 访问已被移动的值会提示 use of moved value,可结合 print &var 查看地址与状态
  • 结合 AddressSanitizer(ASan)定位内存错误:
    • 在 Cargo 配置或环境变量启用 ASan(如 RUSTFLAGS="-Z sanitizer=address"),编译后用 GDB 运行
    • 在 GDB 中处理 ASan 触发的 SIGSEGV:handle SIGSEGV stop nopass,便于中断查看现场与调用栈

三 IDE 与远程调试 VSCode

  • 本地调试配置(CodeLLDB):
    • 安装 VS Code 扩展:Rust AnalyzerCodeLLDB
    • 生成 .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"}]}
  • 远程开发调试(Windows 客户端 + Ubuntu 服务器):
    • 安装 VS Code 扩展:Remote - SSH
    • 使用 Remote-SSH 连接到 Ubuntu,打开项目后在远程侧安装 Rust AnalyzerCodeLLDB
    • 直接使用上述 launch.json 进行断点、变量查看与单步调试,所有构建与运行均在远程完成

四 快速诊断与辅助工具

  • 打印调试:
    • 使用 println!("{:?}", x) 或美化输出 println!("{:#?}", x)
    • 使用 dbg!(&x) 快速打印带文件与行号的表达式值
    • 为自定义类型派生 Debug#[derive(Debug)]
  • 内存与并发问题检测:
    • Valgrind(如 valgrind --tool=memcheck ./your_binary)定位越界、释放后使用与泄漏
    • AddressSanitizer(ASan)高效发现越界与 use-after-free;配合 GDB 可精确定位触发点
    • Helgrind/ThreadSanitizer 检测数据竞争与锁序问题
  • 二进制与反汇编辅助:
    • 使用 cargo objdump -d 查看反汇编,cargo size 检查段大小,cargo readobj 查看文件头信息,辅助定位链接与优化相关问题

0