温馨提示×

Rust代码在Ubuntu上如何调试

小樊
58
2025-10-04 00:32:35
栏目: 编程语言

1. 准备工作:安装调试工具与构建带调试信息的程序
在Ubuntu上调试Rust代码前,需先安装调试工具并确保程序包含调试符号(用于显示变量名、行号等信息)。

  • 安装调试器:Ubuntu默认仓库提供GDB和LLDB,通过以下命令安装:
    sudo apt install gdb lldb  # 同时安装GDB和LLDB
    
  • 构建带调试信息的程序:使用Cargo构建时,默认会生成调试信息(无需额外参数)。若需明确指定,可使用:
    cargo build  # 默认生成带调试信息的可执行文件(位于target/debug/目录)
    
    若需发布模式但不去除调试信息,可添加--debug参数(Rust 1.70+支持):
    cargo build --release --debug
    

2. 使用GDB调试Rust程序
GDB是GNU项目的经典调试器,支持Rust程序的基础调试功能。

  • 启动GDB:通过rust-gdb(Rust封装的工具,自动加载Rust符号)或直接使用GDB启动程序:
    rust-gdb target/debug/your_program  # 推荐:自动识别Rust源码和调试信息
    # 或
    gdb target/debug/your_program
    
  • 常用命令
    • break main:在main函数入口设置断点;
    • break src/main.rs:10:在src/main.rs第10行设置断点;
    • run:启动程序,运行至断点处暂停;
    • next(或n):逐行执行(跳过函数调用);
    • step(或s):逐过程执行(进入函数内部);
    • print variable_name(或p variable_name):查看变量值;
    • backtrace(或bt):查看函数调用栈;
    • quit:退出GDB。

3. 使用LLDB调试Rust程序
LLDB是LLVM项目的高性能调试器,Rust官方推荐的首选工具,支持更现代的调试特性。

  • 启动LLDB:通过rust-lldb(Rust封装的工具)或直接使用LLDB启动程序:
    rust-lldb target/debug/your_program  # 推荐:自动加载Rust调试信息
    # 或
    lldb target/debug/your_program
    
  • 常用命令
    • breakpoint set --name main:在main函数设置断点;
    • breakpoint set --file src/main.rs --line 10:在src/main.rs第10行设置断点;
    • run:启动程序;
    • next(或n):逐行执行;
    • step(或s):进入函数;
    • frame variable:查看当前栈帧的所有变量;
    • print variable_name(或p variable_name):查看变量值;
    • bt:查看调用栈;
    • quit:退出LLDB。

4. 使用Visual Studio Code(VS Code)集成调试
VS Code通过rust-analyzer扩展和launch.json配置,提供图形化调试界面,适合新手和高效开发。

  • 安装扩展:在VS Code扩展商店搜索并安装rust-analyzer(Rust官方推荐的代码分析工具)。
  • 配置launch.json:在项目根目录创建.vscode/launch.json文件,添加以下配置(以LLDB为例):
    {
      "version": "0.2.0",
      "configurations": [
        {
          "type": "lldb",
          "request": "launch",
          "name": "Debug Rust Program",
          "program": "${workspaceFolder}/target/debug/your_program",  // 可执行文件路径
          "args": [],  // 程序运行参数(如["arg1", "arg2"])
          "cwd": "${workspaceFolder}",  // 工作目录
          "sourceLanguages": ["rust"]  // 指定源码语言
        }
      ]
    }
    
  • 调试操作
    • 打开需要调试的Rust文件,点击行号左侧设置断点;
    • F5启动调试,程序会在断点处暂停;
    • 使用调试工具栏的按钮(继续、单步跳过、单步进入、查看变量等)进行调试。

5. 使用日志与断言辅助调试
除专业调试器外,可通过日志输出和断言快速定位问题。

  • 使用println!/dbg!/log
    • println!("变量值: {}", variable):简单输出变量值(适合快速检查);
    • dbg!(variable):输出变量值及文件名、行号(更便捷,推荐使用);
    • log::info!("状态: {:?}", state):结合env_logger库记录结构化日志(适合复杂项目)。
  • 启用详细回溯:当程序崩溃时,设置RUST_BACKTRACE环境变量查看完整调用栈:
    RUST_BACKTRACE=1 cargo run  # 显示完整回溯信息
    
    或在代码中手动触发回溯:
    if let Err(e) = your_function() {
        eprintln!("Error: {:?}", e);
        std::process::exit(1);
    }
    

6. 专用Rust调试工具
Rust社区提供rust-gdbrust-lldb工具,封装了标准调试器的Rust支持,简化了调试流程:

  • rust-gdb:基于GDB,自动加载Rust源码和调试符号,无需手动配置;
  • rust-lldb:基于LLDB,提供更现代化的调试体验(如更好的Rust语法支持)。
    使用方式与原生调试器类似,只需将gdblldb替换为rust-gdb/rust-lldb即可。

0