Rust的逐步交互式调试器?

时间:2016-06-02 08:13:41

标签: debugging rust

如何逐步以交互方式调试Rust应用程序,就像我可以在Ruby中使用“pry”一样?

我希望能够在达到断点时实时查看并优选更改变量。是否有任何生产准备完成的项目?

3 个答案:

答案 0 :(得分:20)

我发现VS Code和扩展名CodeLLDB的可用性很高:

  1. Install VS Code
  2. 从VS Code中搜索并安装Rust (rls)
  3. Install LLDB
  4. 从VS Code中搜索并安装CodeLLDB
  5. LLDB调试器添加了可从其启动调试器的主菜单项“调试”。 首次启动调试时,必须选择环境(调试器):选择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"]
            }
        ]
    }
    

以下是一些有关Rust和VS Code的博客文章:

答案 1 :(得分:16)

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

答案 2 :(得分:4)

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