rustdebugwithvscode

「这是我参与11月更文挑战的第 8 天,活动详情查看:2021最后一次更文挑战


最近在学习一些 rust lib 时,需要观察内部的数据转换以及 API 使用,而最好的办法就是在看源码。在学习源码过程中,可以运行过程中 debug 看看流程。

目前 rust-analyzer 在vscode支持比较好,所以本文配置是在vscode完成的。

本文也是为了省未来思考的时间,记录一下配置的步骤

前置准备

需要现在 vscode 安装好以下plugin:

  1. 安装 rust-analyzer plugin
  2. 安装 C/C++ plugin(Windows) → DEBUGER

debug+lang上的插件都准备好了,下面需要配置一下 debug 的启动属性

debug config

单击 "调试(Debug)" → "添加配置(Add Configuration)"

在 Windows 上,请选择 C++ (Windows) → 使用的是 GDB 进行调试

会创建一个新的 launch.json 。需要开发者自行修改 program(可执行文件)

image.png

{
    // 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": [
        {
            "name": "(Windows) 启动",
            "type": "cppvsdbg",
            "request": "launch",
							// 需要配置你执行文件的路径
            "program": "${workspaceRoot}/examples-play/target/debug/examples/exam_gjson.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceRoot}",
            "environment": [],
            "console": "integratedTerminal",
        }
    ]
}
复制代码

当然如果你需要debug多个文件,那需要在 launch.json 配置多项。

然后需要验证一下是否开始 break:

image.png

剩下就可以开始添加断点 → 按 F5 开始启动执行。

限制条件

调试Rust的效果很好。它并不完美。基本类型工作良好。当然,前提是它们没有被编译器优化掉。

image.png

我发现Rust编译器在优化 "未使用的" 变量时比C++更积极一些。有时我在变量中存储中间值,只是为了调试器。它们的缺失会让人感到迷惑,这点不是很好。

vector的调试就很好。我希望未展开的 "预览"能提供更多信息:

image.png

不幸的是,其他的容器根本就不能工作。HashMap是难以辨认的垃圾,很难看清楚。 🙁

image.png