逐步交互式 Rust 调试器?

如何像在 Ruby 中使用“ pry”那样逐步调试 Rust 应用程序 互动

我希望能够看到,并最好改变实时变量,当我达到一个断点。是否有已完成的生产项目?

58002 次浏览

Rust 编译器生成具有本机调试信息(符号)信息的本机二进制文件,因此任何本机调试器都可以这样做。这意味着 gdblldb,或者 Windows 调试器(WinDBG 或者仅仅是 Visual Studio) ,如果您正在使用 Rust 的 MSVC ABI 版本。如果你想要一个集成的体验,RustDT是方法去(安装在 Windows: 如何设置 GDB 来调试 Windows 中的 Rust 程序?)。请注意,您可能会在 Windows 上遇到 调试 MSVC ABI Rust 程序时如何检查变量值?,在 Mac 上遇到 https://github.com/rust-lang/rust/issues/33062

对于图形化调试器,有 Gdbgui。它适用于 Linux、 Windows 和 MacOS。它使用浏览器作为显示,并与调试器交互。

与 gdb 原生命令相比,我有 gdb 7.11rust-gdb命令似乎提供了更多与锈相关的信息。 例如,rust-gdb正确地显示带有全名的锈对象,而 gdb 根本不显示它们。
In the following example gdb would now show at all the bold parts.

$1 = Args = {
inner = **ArgsOs** = {
inner = **Args** = {
iter = **IntoIter<std::ffi::os_str::OsString>** = {
buf = **NonNull<std::ffi::os_str::OsString>** = {
pointer = **NonZero<*const std::ffi::os_str::OsString>** = {
0x7ffff6c20060
}
},
phantom = **PhantomData<std::ffi::os_str::OsString>**,
cap = 1,
ptr = 0x7ffff6c20060, end = 0x7ffff6c20078},
_dont_send_or_sync_me = **PhantomData<*mut ()>**
}
}
}

我发现 VS 代码CodeLLDB扩展有很好的可用性:

  1. 安装 VS 代码

  2. 在 VS Code 中搜索并安装扩展 铁锈分析仪

  3. 检查平台的必备条件和 setup CodeLLDB。从1.6版本开始,不需要进一步的设置。

  4. 在 VS Code 中搜索并安装扩展 CodeLLDB

  5. LLDB 调试器添加了主菜单项“ Run”,从这里可以启动调试器。 第一次启动调试时,必须选择环境(调试器) : 选择 LLDB。

  6. 当您选择 LLDB 时,将打开一个 launch.json文件,如果没有,打开它,它在 .vscode文件夹下

  7. 你的 launch.json应该是这样的:

    {
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
    {
    "type": "lldb",
    "request": "launch",
    "name": "Debug",
    "program": "${workspaceRoot}/target/debug/hello_world",
    "args": [],
    "cwd": "${workspaceRoot}/target/debug/",
    "sourceLanguages": ["rust"]
    }
    ]
    }
    
  1. 如果希望保持通用性,并且只编译与货物文件夹名称匹配的二进制文件,可以使用 ${ workspaceRootFolderName }变量替换“ program”键:

     {
    "version": "0.2.0",
    "configurations": [
    {
    "type": "lldb",
    "request": "launch",
    "name": "Debug",
    "program": "${workspaceRoot}/target/debug/${workspaceRootFolderName}",
    "args": [],
    "cwd": "${workspaceRoot}/target/debug/",
    "sourceLanguages": ["rust"]
    }
    ]
    }
    

Here are some blog posts about Rust and VS Code: