在VSCode中实现Rust编程调试指南

在 VS Code 中调试 Rust:终极指南

在本教程中,您将学习如何使用 VS Code 调试 Rust。可用于使用 VS Code 调试 Rust 的操作。设置 VS Code 来调试 Rust

Rust因其易用性、安全性和高性能而继续保持其作为最受欢迎的编程语言的地位。随着 Rust 的流行,许多新开发人员第一次学习 Rust。

在本地设置Rust开发时的一项重要任务是选择一个开发环境,然后设置该环境来执行您想要的操作。许多开发人员选择在Visual Studio Code中调试他们的代码,因为它是免费的,并且在大多数硬件上使用起来感觉很敏捷。

让我们看看如何在 Visual Studio Code 上设置 Rust 进行调试!

内容:

  • 我们应该用什么来调试 Rust 代码?
    • VS Code
    • CLion
    • JetBrains’ Fleet
  • 可用于使用 VS Code 调试 Rust 的操作
  • 在您的计算机上设置 Rust
    • 创建我们的 Rust 项目
  • 设置 VS Code 来调试 Rust
  • 在 VS Code 中设置断点
  • 使用 VS Code 调试 Rust 的局限性

我们应该用什么来调试 Rust 代码?

在开始编写代码之前,我们有一个严肃的问题需要回答,即我应该使用什么 IDE?选择 IDE 是非常主观的,因此没有人能真正说一种工具绝对比另一种更好(如果他们这样做了,他们可能会让一些读者写下相当强烈的评论,争论为什么他们的特定选择比给定的建议更好。与其说一种 IDE 客观上比另一种更好,不如让我们考虑三个可以选择的好选项。

VScode

值得喜欢的事情: VS Code 受益于可跨各种平台使用,因此无论您是在 Linux、Windows 还是 macOS 上进行编码,您始终能够开发和调试 Rust。

开发体验也是一流的,因为VS Code 的 Rust 插件会在您的 Rust 项目中使用rust-analyzer。这意味着您可以在 VS Code 本身中获得出色的代码提示和建议。

它的价格也合适(免费!)并且性能良好。如果将 VS Code 与 CLion 等其他 IDE 进行比较,您会发现 VS Code 的表现出奇地好。而且,如果您已经在开发软件,那么您很可能现在已经将其安装在计算机上。

需要考虑的事情: VS Code 比其他 IDE 轻得多,但需要注意的是,它并不是真正的 IDE(它更像是一个精美的文本编辑器),并且没有其他功能更齐全的解决方案中的许多功能。它还缺乏在处理大型项目时非常重要的简单功能,例如能够将选项卡撕到新窗口中。

因此,在处理单独文件的同时查看其他文件变得相当繁琐。如果您是处理 Rust 项目的团队的一员,您也可能会从另一个具有更好 Git 集成的 IDE 中受益。

CLion

值得喜欢的事情: JetBrains 为 Rust 开发提供了功能齐全的 IDE,与 rust-analyzer 完美集成,意味着一个使用起来令人愉悦的开发环境。鉴于 JetBrains 在 Android Studio 和 IntelliJ IDEA 等领域拥有广泛的工具,以前使用过其工具的人们将会欣赏 IDE 的类似布局和可用性。

深思熟虑的添加,例如在文件中编写依赖项时为您提供可供选择的软件包版本cargo.toml,这在很大程度上说明了为什么这个 IDE 非常适合用来开发 Rust 应用程序。然后还有随之而来的所有其他 IntelliJ 优点,比如良好的 Git 集成来管理提交和签入新代码。这使得 Rust 项目的团队工作变得更加容易。

**需要考虑的事情:**它不是免费的。截至撰写本文时,个人每年的费用约为 99 美元。此外,拥有更多功能意味着有更多要求,CLion 比 VS Code 占用更多的 RAM 和系统资源。

JetBrains Fleet

值得喜欢的事情: Fleet是可用于处理 Rust 应用程序的工具的新成员。它仍然由 JetBrains 开发,如果您已经使用过他们的 IDE 之一,那么您的大部分知识将会继续存在。更好的是,它感觉比 CLion 响应更快,并且比 IntelliJ 系列中的其他 IDE 更少臃肿。虽然它处于测试阶段(稍后会详细介绍),但它也是免费使用的,因此非常值得检查许可费用是否是一个限制。

**需要考虑的事情:**它还没有真正发布——它仍然处于(相当长的)抢先体验计划中。如果您只是将 Rust 作为一种爱好,那可能没问题。但是,如果您在日常工作中使用 Rust,您不会希望将所有希望都寄托在仍具有预发布质量的 IDE 上。

还是拿不定主意吗?查看VS Code 和其他 IDE 之间的深入比较以了解更多信息。对于本文,考虑到社区的广泛使用以及它是免费提供的事实,我们将考虑如何在 VS Code 中调试 Rust 代码。

可用于使用 VS Code 调试 Rust 的操作

当您使用rust-analyzerVS Code 扩展时,它提供了一系列代码检查功能,可帮助您编写更高质量的代码。例如,如果我们创建一个enum但不使用它,VS Code 将显示一条警告,表明该声明enum是多余的:

深色背景的 VS Code 终端显示弹出警告,枚举声明是多余的

然后,如果我们getSimpleEnummain函数中使用该函数,rust-analyzer如果我们尚未使用match调用的所有结果,则会提示:

深色背景的 VS Code 终端显示弹出提示列表缺少匹配武器

更好的是,来自的建议rust-analyzer将自动为我们生成我们的匹配警告:

深色背景的 VS Code 终端显示四个自动生成的枚举匹配臂

rust-analyzerVS Code 中还有更多可用功能。查看用户手册以了解全部内容。在我们的计算机上安装了 VS Code 后,让我们开始设置 Rust。

在您的计算机上设置 Rust

在 macOS 或 Linux 上,安装 Rust 就像在终端中输入以下命令一样简单:

$ curl --proto '=https' --tlsv1.3 https://sh.rustup.rs -sSf | sh

在 macOS 上,您还需要一个 C 编译器,您可以通过xcode-select --install在终端中输入来获取它。如果您在 Windows 上安装 Rust,设置会略有不同。您需要首先从网站检索 Rust,然后安装适用于 Windows 的构建工具。这些是Visual Studio 2022的一部分,因此请确保安装使用 C++ 工作负载的桌面开发以及 Windows v10 或 v11 SDK。

完成所有这些后,您应该在计算机上安装 Rust CLI。您可以通过打开命令窗口或终端并键入 来进行检查rustc --version。输出应显示您当前安装的 Rust 版本,如下所示:

黑色背景的命令窗口显示命令和输出,用于显示当前安装的 Rust 版本

创建我们的 Rust 项目

当您仍在命令窗口中时,导航到要在其中创建项目的目录。然后,运行cargo new rustdebuggingrustdebugging是本教程的项目名称,但如果您愿意,可以将您的项目称为其他名称。大约一秒钟后,您应该会在窗口中看到此消息:

黑色背景和白色文本的命令窗口,带有一个绿色文本单词“已创建”,显示创建 Rust 项目的命令和确认消息

现在,通过输入将目录更改为我们的新项目cd rustdebugging。然后,键入code .将在该目录中打开 VS Code。

设置 VS Code 来调试 Rust

当我们第一次打开项目时,我们需要在出现提示时表明我们信任该项目。否则,我们将无法做任何事情:

带有弹出消息的 VS Code 窗口提示用户确认对项目作者的信任

接下来,我们需要安装rust-analyzer. 这是在 VS Code 中编译和调试 Rust 代码不可或缺的一部分。导航到VS Code 中的EXTENSIONS: MARKETPLACE,然后找到并安装该rust-analyzer包,如下所示:

VS Code 扩展市场与 Rust 分析器已启动

然后,我们可以从 VS Code 中打开一个终端窗口并执行cargo build

VS Code 终端窗口,左侧带有文件资源管理器面板,右侧打开主 Rs 文件,显示执行 Cargo Build 命令的完成结果

完成此操作后,我们的项目中应该有一条新路径target/debug/rustdebugging.exe

在 VS Code 中设置断点

现在,打开您的main.rs文件,并观察现有的"Hello, World!"语句。如果我们单击行号的左侧,我们可以为该特定行设置断点:

带有红色箭头的 VS Code 终端指向第二行左侧,用户应单击此处设置断点

一旦我们设置了断点,该行上就会有一个红色的小圆圈,如下所示:

VS Code 终端中显示断点的第二行的特写视图

如果我们敲击**F5**键盘,就会出现一个新的控制台窗口,并且我们的代码应该停在该行上。我们还应该在 VS Code 中看到调试窗口,例如视图VariableCall Stack. 我们的"Hello, World!"行以黄色突出显示,表明这是执行停止的行:

VS Code 终端,第二行以黄色突出显示,表明执行已在断点处停止

现在,让我们通过将两个数字相加来使代码变得更复杂。将 的内容替换main.rs为以下内容:

fn main() {
    let applesThatJaneHas = 3;
    let applesThatBobHas = 2;
    println!("The total amount of apples that everyone has is {:?}", applesThatBobHas + applesThatJaneHas);
}

现在,如果我们在调用上重新应用断点println并按**F5**,我们的代码仍会停在该行。但是,我们可以看到 VS Code 的左侧有局部变量视图:

VS Code 终端有两个双面红色箭头指向功能线及其各自的局部变量视图。 带断点的突出显示行现在出现在第四行

将 our 更新apple counts为 avec在调试器中也可见:

VS Code 终端带有指向 Vec 和相应局部变量视图之间的双面红色箭头

甚至其他更复杂的类型也HashMap可以在局部变量视图中得到很好的解释。现在,将代码替换main.rs为以下内容:

use std::collections::HashMap;
fn main() {
    let mut apple_map = HashMap::from([
        ("Red Delicious", 2),
        ("Kawana Apple", 5),
    ]);
    println!("The total amount of apples that everyone has is {:?}", apple_map);
}

VS Code 终端具有三个双面红色箭头,指向哈希映射行和相应的局部变量视图

当断点被命中并且变量出现在视图中时,您就可以在 VS Code 中调试 Rust 程序了!

使用 VS Code 调试 Rust 的局限性

虽然 VS Code 是开发 Rust 项目的优秀工具,但开发人员应该记住,它在技术上并不是一个完整的 IDE。虽然这可能是一件好事(例如,就 VS Code 的使用感觉而言),但这也意味着 VS Code 中可能不存在某些高级功能,或者可能必须通过扩展来添加。

VS Code 的另一个可能的问题是,与许多其他开发工具不同,它无法将编辑器中的选项卡撕到新窗口中。此功能的问题已经存在相当长一段时间了,而且没有迹象表明会很快发生变化。这不一定是一个大问题,但对于许多习惯了此功能的开发人员来说,它并不是当今 VS Code 的一部分。

结论

现在,您已准备好在 VS Code 中开发 Rust 项目。您可以借此机会在 VS Code 中安装更多扩展,以帮助您的开发工作流程。看看下面的一些建议。

Rust 使用cargo.toml文件来跟踪依赖项和其他项目元数据。使用 Better TOML 扩展可为您提供语法突出显示和验证。您可以使用Crates检查您的项目中是否使用的是最新的 crates。此扩展有助于更新依赖项,无论是一次一个还是一次全部。

要在 VS Code 中对 Rust 项目进行更高级的调试,请查看 CodeLLDB 扩展。除其他功能外,此扩展还允许您设置条件断点。
如果您正在开始使用 Rust,现在是参考官方 Rust 编程语言教程的绝佳时机,例如如何编写猜谜游戏。这些教程对 Rust 语言作为一个整体进行了精彩的介绍,并将帮助您踏上成为 Rust 开发人员的旅程。

设置好工作区后,无论您使用什么操作系统,您都可以轻松地处理 Rust 项目。快乐编码!

更多Rust编程:https://www.jdon.com/tag-28556/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/6644.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

elementui el-table折叠表格,点击主表数据展开从表明细

用element-ui 的el-table实现&#xff1a;主表table可实现展开行显示关联的明细表table的列表数据&#xff0c;效果图如下 <el-tableref"tableData"v-loading"listLoading":data"tableData"row-key"id"borderstripehighlight-curr…

自动驾驶感知系统-激光雷达

感知系统 现有的车载传感器主要包括超声波雷达、激光雷达、毫米波雷达、车载摄像头、红外探头等。主流的自动驾驶感知平台以雷达和车载摄像头为主&#xff0c;呈现多传感器融合发展趋势。基于测量能力和环境适应性&#xff0c;预计雷达和车载摄像头会保持其感知平台霸主地位&a…

在react中配置less

第一步&#xff1a;暴露出webpack配置文件 终端命令&#xff1a;npm run eject (此命令一旦运行不可逆) 第二步&#xff1a;安装less以及less-loader npm install less less-loader --save-dev 第三步&#xff1a;修改webpack的配置文件 运行完以上命令后&#xff0c;项目…

精通自动化,Pytest自动化测试框架-fixture用例的前后置(实现)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 测试用例实现前后…

crmeb部署

安装宝塔 教程 安装所需要的软件 php mysql5.7 redis fileinfo nginx 安装crmeb 重启mysql 前台http://192.168.216.128/ 后台http://192.168.216.128/admin admin admin888登录 访问前台

自动化运维工具--saltstack部署及使用

目录 一、saltstack简介 1、介绍 2、Salt的核心功能 3、saltstack通信机制 二、saltstack部署 1、部署环境 2、配置yum源 3、安装master与minion 4、连接认证master和minion 三、salt运行 1、执行格式 2、实操演示 一、saltstack简介 1、介绍 saltstack是一个配置管…

连锁反应开始了!Linux 发行版迎新变化!

任何企业都有合法权利捍卫其模型和产品。撇开大量不真正了解开源许可证如何工作的人不谈&#xff0c;我们的印象是&#xff0c;有很多人觉得仅仅因为这是Linux&#xff0c;他们就有某种权利免费获得它。但事实上&#xff0c;他们没有。这不是自由软件中的“自由”的意思&#x…

浮点型在内存中的存储

目录 1.浮点数是什么&#xff1f; 2. 浮点数存储规则 1.浮点数是什么&#xff1f; 就是数学中的小数。 常见的浮点数&#xff1a; 3.14159 1E10&#xff08;1*10^10&#xff09; 浮点数家族包括&#xff1a; float、double、long double 类型。 浮点数表示的范围&#x…

前端 | ( 十二)CSS3简介及基本语法(中)| 变换、过渡与动画 | 尚硅谷前端html+css零基础教程2023最新

学习来源&#xff1a;尚硅谷前端htmlcss零基础教程&#xff0c;2023最新前端开发html5css3视频 系列笔记&#xff1a; 【HTML4】&#xff08;一&#xff09;前端简介【HTML4】&#xff08;二&#xff09;各种各样的常用标签【HTML4】&#xff08;三&#xff09;表单及HTML4收尾…

【C++基础(六)】类和对象(中) --构造,析构函数

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:C初阶之路⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习C   &#x1f51d;&#x1f51d; 类和对象-中 1. 前言2. 构造函数3. 构造函数的特性4…

分布式系统的应用程序性能监视工具-skywalking

分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。提供分布式链路日志追踪、剖析、服务网格遥测分析、度量聚合和可视化一体化解决方案。 在应用系统进行实时监控,实现对应用性能管理和故障定位的系统化解决方案中常用的…

爬虫小白-如何辨别是否有cookie反爬案例

目录 一、Cookie介绍二、cookie生成来源区分查找三、如何判断是否有cookie反爬四、来自服务器生成的cookie反爬解决方法五、来自js生成的cookie反爬解决方法 一、Cookie介绍 先推荐该篇文章简单了解Cookie、Session、Token、JWT1、cookie的类型&#xff1a;会话cookie和持久co…

[驱动开发]字符设备驱动应用——点灯

点亮开发板stm32mp157的三盏灯 //头文件 #ifndef __LED_H__ #define __LED_H__//封装GPIO寄存器 typedef struct { volatile unsigned int MODER; // 0x00volatile unsigned int OTYPER; // 0x04volatile unsign…

Linux Day01

目录 一、Linux终端介绍 二、Linux目录介绍 1.目录结构 2.常见目录说明 3.绝对路径与相对路径 4.家目录 一、Linux终端介绍 二、Linux目录介绍 Linux目录&#xff1a;是从根目录"/"开始的 是一棵倒着的树 1.目录结构 2.常见目录说明 目前记住 bin 存放常用命…

跨境独立站如何应对恶意网络爬虫?

目录 跨境出海独立站纷纷成立 爬虫威胁跨境电商生存 如何有效识别爬虫&#xff1f; 技术反爬方案 防爬虫才能保发展 中国出海跨境电商业务&#xff0c;主要选择大平台开设店铺&#xff0c;例如&#xff0c;亚马逊、eBay、Walmart、AliExpress、Zalando等。随着业务的扩大&…

使用springboot进行后端开发100问

properties和yaml文件怎么互转 安装插件 properties文件和yaml文件区别 properties 文件通过“.”和“”赋值&#xff0c;值前不加空格&#xff0c;yaml通过“:”赋值&#xff0c;值前面加一个空格&#xff1b;yaml文件缩进用空格&#xff1b; properties只支持键值对&#x…

Ubuntu下打开QtCreator环境变量LD_LIBRARY_PATH与终端不一致

问题描述&#xff1a; 在unbuntu下使用QtCreator编译、运行程序时&#xff0c;总是出现XXX.so: cannot open shared object file: No such file or directory这类问题&#xff0c;但是在终端中编译或者运行程序则不会出现这些问题。在网上查了好久才明白QtCreator在打开时&…

逻辑漏洞原理及实战

前言 作者简介&#xff1a;不知名白帽&#xff0c;网络安全学习者。 博客主页&#xff1a;不知名白帽_网络安全,CTF,内网渗透-CSDN博客 网络安全交流社区&#xff1a;https://bbs.csdn.net/forums/angluoanquan 目录 逻辑漏洞基础 概述 分类 URL跳转漏洞 概述 危害 漏洞…

51单片机串口

该部分的笔记来自视频教程链接https://www.bilibili.com/video/BV1bt4y197NR/?spm_id_from333.788&vd_sourceb91967c499b23106586d7aa35af46413 一、51单片机串口基础介绍 一般的应用层的协议中采用和校验或CRC校验&#xff0c;而奇偶校验还是解决基本通信中的帧格式中的…

Eclipse整合tomcat时要注意的几点

Eclipse整合tomcat时要注意的几点 1、安装目录及jdk 2、参数配置 注意&#xff1a;Arguments的配置&#xff0c;日志输出文件目录及java内存大小设置等&#xff0c;如下&#xff1a; -Dcatalina.base"E:\apache-tomcat-7.0.52" -Dcatalina.home"E:\apache-tomc…