温馨提示×

Linux系统中Rust如何调试

小樊
47
2025-11-16 16:15:07
栏目: 编程语言

Linux下Rust调试实操指南

一 环境准备与构建配置

  • 安装调试器与工具链:在基于 Debian/Ubuntu 的系统执行 sudo apt-get install gdb lldb;在 CentOS/RHEL 执行 sudo yum install gdb lldb。Rust 提供增强版调试器包装 rust-gdbrust-lldb,能更好识别 Rust 特有类型与宏
  • 生成调试符号:默认 cargo build 即为 dev 配置,已包含调试信息;如需显式配置,可在 Cargo.toml 中确保:
    [profile.dev]
    debug = true
    opt-level = 0    # 关闭优化更利于单步与观察
    overflow-checks = true
    
    调试时优先使用 target/debug/your_program;仅在需要性能分析时再用 –release(优化会重排代码、影响调试体验)。
  • 发行版调试建议:在 CentOS 等发行版上同样通过 gdb/lldb 配合 rust-gdb/rust-lldb 使用,步骤与主流发行版一致。

二 命令行调试器使用

  • 使用 rust-gdb(推荐):
    rust-gdb target/debug/your_program
    (gdb) break main
    (gdb) run
    (gdb) next
    (gdb) step
    (gdb) print variable_name
    (gdb) backtrace
    (gdb) info locals
    (gdb) info args
    
  • 使用 rust-lldb(推荐):
    rust-lldb target/debug/your_program
    (lldb) breakpoint set --name main
    (lldb) run
    (lldb) next
    (lldb) step
    (lldb) print variable_name
    (lldb) bt
    (lldb) frame variable
    
  • 小技巧
    • 条件断点(LLDB):breakpoint set -f src/main.rs -l 42 -c "x > 10"
    • 打印表达式与类型:print my_vec.len()pt my_var
    • 观察点:watch my_var(值改变时中断)
      这些命令在 rust-gdb/rust-lldb 中对 Vec、HashMap、String、Option/Result 等类型有更友好的显示。

三 IDE与编辑器调试

  • Visual Studio Code:安装 rust-analyzerCodeLLDB 扩展,创建 .vscode/launch.json,示例:
    {
      "version": "0.2.0",
      "configurations": [
        {
          "type": "lldb",
          "request": "launch",
          "name": "Debug",
          "program": "${workspaceFolder}/target/debug/your_program",
          "args": [],
          "cwd": "${workspaceFolder}",
          "env": {}
        }
      ]
    }
    
    之后在代码行号左侧点击设断点,按 F5 启动调试。
  • IntelliJ IDEA / CLion:安装 Rust 插件,使用内置 LLDB/GDB 后端进行图形化断点、变量与堆栈查看。

四 辅助手段与常见问题

  • 快速打印与断言
    • dbg!(expr):打印表达式值与 文件:行号,适合临时定位。
    • println!("{:?}", value):对实现 Debug 的类型输出。
    • debug_assert! / assert_eq!:开发期验证不变式,发布构建自动移除(未定义 NDEBUG 时生效)。
  • 日志与测试
    • 使用 log + env_logger 输出运行轨迹;
    • cargo test 编写单元/集成测试,隔离问题。
  • 内存与性能
    • Valgrind(内存错误/泄漏):valgrind --tool=memcheck target/debug/your_program
    • perf(热点与调用栈):perf record -g target/debug/your_program && perf report
  • 崩溃回溯与编译器选项
    • Cargo.toml 启用更详细的回溯:
      [profile.dev]
      debug = true
      rustflags = ["-Z", "backtrace"]
      
    这样在 panic 时可获得更完整的调用栈信息。

0