在我的事业开始的早期,我成为了一个PL/SQL数据库开发者。我们没有使用任何调试机器,我始终不知道为什么那么做。为了修复bug,我们会 在任何地方添加信息并尝试隔离问题。聪明的小孩会采用二分查找的方法,在每一百行创建信息,找出问题在哪一行之间,然后精炼查找,每十行放置一次信息。
当我从Oracle转到SAP和它的ABAP语言(它有一个很棒的调试器)时,我发现了一个新的世界。然后,当我需要再次改变技术(转向Rust)时,我突然害怕这样一个问题:“我会在那里安装调试器吗?”
下面是我的回答
你来这里的目的是:在VSCode中调试Rust
首先,你需要一个插件
你为什么需要那些?
- 简短的回答:Rust编译器使用LLVM去和机器交互,并且这些扩展允许我们在这个层面和代码交互
- 长的回答:超出我的等级,我只是在你的电脑上安装东西的支持人员;而不是问我,查看这个
现在,在你的VScode,进行以下的步骤:Run > Start Debugging > Ok > Yes
期待的结果是创建一个像下面这样的文件/.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
有两个或者三个入口
现在,理论上,你可以在你的代码里打断点
如果你不可以,是因为选项是无效的。为了解决这个问题,打开你的Settings并且进入Debug(下面的功能————你可以在搜索框输入“breakpoint”快速找到)并且选中“Allow Breakpoints Everywhere”选项
你的断点建立之后,按F5或者点击Run > Start Debugging (如果你有文件现在就可以调试)你应该得到这样的结果
总的来说,在左侧,你的值加载到了内存中。在处理像这些整数这样的类型时,事情非常简单,但是当你加载像HashMaps这样的值的时候就会变得十分混乱,但这比什么都没有要好一些。