一步一步交互式调试器的 rust ?

irlmq6kh  于 2022-12-19  发布在  其他
关注(0)|答案(5)|浏览(229)

我怎样才能像在Ruby中使用“pry”一样,一步一步地交互地调试Rust应用程序?
我希望能够看到,最好是改变变量在真实的当我达到一个转折点。有任何生产准备完成的项目?

6xfqseft

6xfqseft1#

我发现VS CodeCodeLLDB扩展具有很好的可用性:

  1. Install VS Code
    1.从VS代码中搜索并安装扩展rust-analyzer
    1.检查您的平台的必要条件和setup CodeLLDB。从v1.6开始,不需要进一步的设置。
    1.从VS代码中搜索并安装扩展CodeLLDB
  2. LLDB调试器添加了主菜单项“运行”,从该菜单项可以启动调试器。第一次启动调试时,必须选择环境(调试器):选择LLDB。
    1.当你选择LLDB时,一个launch.json文件将被打开,如果没有,打开它,它在.vscode文件夹下
    1.您的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"]
         }
     ]
 }

下面是一些关于Rust和VS代码的博客文章:

uxhixvfz

uxhixvfz2#

Rust编译器生成带有原生调试信息(符号)的原生二进制文件,因此任何原生调试器都可以。这意味着gdblldb,或者Windows调试器(WinDBG或Visual Studio)(如果您使用的是MSVC ABI版本的Rust)。如果您想要获得集成体验,RustDT是可行之道(在Windows上设置:如何在Windows中设置GDB来调试Rust程序?).请注意,您很可能会在Windows中遇到How can I inspect variable values while debugging MSVC ABI Rust programs?,在Mac中遇到https://github.com/rust-lang/rust/issues/33062

14ifxucb

14ifxucb3#

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

piah890a

piah890a4#

我有gdb 7.11rust-gdb命令似乎比gdb本地命令给予了更多与rust相关的信息。例如,rust-gdb正确地显示了rust对象的全名,而gdb只是不显示它们。
在下面的例子中,gdb将显示在所有的粗体部分。

$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 ()>**
    }
  }
}
yrefmtwq

yrefmtwq5#

答案开头为:
1.安装IDE xyz
......根本不能解决问题。
进入你的项目文件夹,启动rust-gdb target/debug/your_executable,然后选择一些你想要中断的行。点击'运行'...
当你没有IDE的时候(否则你不会问,我猜),它是终端/VIM用户世界中最好的。
下面是一些如何使用的提示:

相关问题