用VSCode调试Rust

1,744 阅读2分钟

在我的事业开始的早期,我成为了一个PL/SQL数据库开发者。我们没有使用任何调试机器,我始终不知道为什么那么做。为了修复bug,我们会 在任何地方添加信息并尝试隔离问题。聪明的小孩会采用二分查找的方法,在每一百行创建信息,找出问题在哪一行之间,然后精炼查找,每十行放置一次信息。

当我从Oracle转到SAP和它的ABAP语言(它有一个很棒的调试器)时,我发现了一个新的世界。然后,当我需要再次改变技术(转向Rust)时,我突然害怕这样一个问题:“我会在那里安装调试器吗?”

下面是我的回答

你来这里的目的是:在VSCode中调试Rust

首先,你需要一个插件

你为什么需要那些?

  • 简短的回答:Rust编译器使用LLVM去和机器交互,并且这些扩展允许我们在这个层面和代码交互
  • 长的回答:超出我的等级,我只是在你的电脑上安装东西的支持人员;而不是问我,查看这个

现在,在你的VScode,进行以下的步骤:Run > Start Debugging > Ok > Yes

ftl8okpayl8084eubg8d.jpeg

a4qb4ntz6jgok1h7eyjk.jpeg

6j52awfjvl5fgsj2laui.jpeg

期待的结果是创建一个像下面这样的文件/.vscode/launch.json:

// File copied from MacOS X
{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "lldb",
            "request": "launch",
            "name": "Debug unit tests in library 'yourprogram'",
            "cargo": {
                "args": [
                    "test",
                    "--no-run",
                    "--lib",
                    "--package=yourprogram"
                ],
                "filter": {
                    "name": "yourprogram",
                    "kind": "lib"
                }
            },
            "args": [],
            "cwd": "${workspaceFolder}"
        }
    ]
}

如果你是windows:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(Windows) Launch",
            "type": "cppvsdbg",
            "request": "launch",
            "program": "${workspaceRoot}/target/debug/yourprogram.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "console": "externalTerminal"
        }
    ]
}

如果有一些我没有意识到的原因,文件不是自动的创建的,你可以拷贝并粘贴它。 除了文件示例文件来自不同的操作系统,第一个是,我们有一个crate的库,当第二个是二进制的时候。如果你在同一个项目里同时有两个crates,你将会在configurations有两个或者三个入口

现在,理论上,你可以在你的代码里打断点

ztrklc0dil1rlyr60jg1.png

如果你不可以,是因为选项是无效的。为了解决这个问题,打开你的Settings并且进入Debug(下面的功能————你可以在搜索框输入“breakpoint”快速找到)并且选中“Allow Breakpoints Everywhere”选项

0knvx5zuugso8ag9xakx.png 你的断点建立之后,按F5或者点击Run > Start Debugging (如果你有文件现在就可以调试)你应该得到这样的结果

p4t3v8ipylq8jk98i68s.png

总的来说,在左侧,你的值加载到了内存中。在处理像这些整数这样的类型时,事情非常简单,但是当你加载像HashMaps这样的值的时候就会变得十分混乱,但这比什么都没有要好一些。

来源:dev.to/rogertorres…