「这是我参与11月更文挑战的第 8 天,活动详情查看:2021最后一次更文挑战」
最近在学习一些 rust lib 时,需要观察内部的数据转换以及 API 使用,而最好的办法就是在看源码。在学习源码过程中,可以运行过程中 debug 看看流程。
目前 rust-analyzer 在vscode支持比较好,所以本文配置是在vscode完成的。
本文也是为了省未来思考的时间,记录一下配置的步骤
前置准备
需要现在 vscode 安装好以下plugin:
- 安装 rust-analyzer plugin
- 安装 C/C++ plugin(Windows) → DEBUGER
debug+lang上的插件都准备好了,下面需要配置一下 debug 的启动属性
debug config
单击 "调试(Debug)" → "添加配置(Add Configuration)"
在 Windows 上,请选择 C++ (Windows) → 使用的是 GDB 进行调试
会创建一个新的 launch.json
。需要开发者自行修改 program(可执行文件)
{
// 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:
剩下就可以开始添加断点 → 按 F5 开始启动执行。
限制条件
调试Rust的效果很好。它并不完美。基本类型工作良好。当然,前提是它们没有被编译器优化掉。
我发现Rust编译器在优化 "未使用的" 变量时比C++更积极一些。有时我在变量中存储中间值,只是为了调试器。它们的缺失会让人感到迷惑,这点不是很好。
vector的调试就很好。我希望未展开的 "预览"能提供更多信息:
不幸的是,其他的容器根本就不能工作。HashMap是难以辨认的垃圾,很难看清楚。 :(