当前位置: 首页 > news >正文

[Rust] 使用vscode实现HelloWorld程序并进行debug

一、简介

本文介绍了如何使用vscode编写rust,实现打印"Hello, world!"的程序。

二、工具安装

0. 环境介绍:

Linux (或者windows+wsl)

1. 安装rust编译器rustc和包管理器cargo。

请参考连接:Rust 程序设计语言 简体中文版-安装。
rust编译器安装完成后,会自动安装cargo。cargo是Rust的包管理器,可以用来方便的进行包管理、编译运行rust程序。
可以使用以下命令查看是否成功安装rust编译器和cargo。
shell rustc -V
shell cargo -V

2. vscode插件安装:

安装rust-analyzerCodeLLDB(用于debug)。

三、实现helloworld

接下来将使用cargo进行管理我们的程序(尽管程序只打印“Hello, world!”一句话)。

1. 新建hello_world工程

cargo new hello_world

此时目录下自动生成一个名字为hello_world/的文件夹。

2. 使用vscode打开工程目录文件夹

使用vscode打开hello_world/文件夹,文件结构如下。
hello_world文件夹结构

3. 编写main.rs文件

编辑main.rs文件,main.rs文件如下:

fn main() {println!("Hello, world!");
}

4. 编译程序

编译我们的hello_world工程。在hello_world/目录下运行以下命令。

cargo build

输出结果如下所示:
使用cargo build编译程序
编译器的输出表示程序hello_world已经编译成功,耗时0.30s。

5. 运行程序

使用以下命令运行程序。

cargo run

若运行成功,运行结果如下:
使用cargo运行程序
可以看到程序成功输出了Hello, world!字符。

6. 进行debug

在vscode中对rust程序进行debug需要安装前面提到的CodeLLDB插件。首先在vscode的设置中设置Debug: Allow Breakpoints Everywhere。如下所示:
设置 allow setting breakpoints in any files

main.rs文件内的代码修改为如下:

fn main() {let _a = 3.0;let _b = _a * _a;println!("_b:{}", _b);
}

假设我们在第4行处打断点,如下图所示:
在第4行处打断点
然后使用LLDB生成launch.json文件。按下ctrl+shift+p,打开vscode的命令输出栏目,输入 LLDB: Generate launch Configurations from Cargo.toml如下图所示:
使用LLDB生成launch.json文件
按下回车后LLDB会根据Cargo.toml文件自动生成launch.json文件内容,此时文件名还是Untitled-1。我们需要将改文件保存到.vscode/目录下,并命名为launch.json(如果没有.vscode/文件夹,先手动在hello_world/目录下创建.vscode/文件夹)。LLDB自动生成的launch.json文件内容如下:

{"version": "0.2.0","configurations": [{"type": "lldb","request": "launch","name": "Debug executable 'hello_world'","cargo": {"args": ["build","--bin=hello_world","--package=hello_world"],"filter": {"name": "hello_world","kind": "bin"}},"args": [],"cwd": "${workspaceFolder}"},{"type": "lldb","request": "launch","name": "Debug unit tests in executable 'hello_world'","cargo": {"args": ["test","--no-run","--bin=hello_world","--package=hello_world"],"filter": {"name": "hello_world","kind": "bin"}},"args": [],"cwd": "${workspaceFolder}"}]
}

现在hello_world/目录下的文件结构如下:
包含launch.json文件的hello_world文件夹结构
之后点击vscode的状态栏的Debug excutabel 'hello_world' (hello_world)图标,并选择Debug executable 'hello_world'即可进行debug。
即下图红框中的图标:
vscode状态栏Debug图标
可以看到程序成功运行到我们的断点处,并在左侧窗口中显示了中间变量的值。如下图所示:
Debug结果

四、参考

[1]. Rust in Visual Studio Code
[2]. Hello, Cargo!

相关文章:

  • 后端程序员入门react笔记(九)- react 插件使用
  • AI智能分析网关V4在非煤矿山安全生产视频智能监管场景中的应用
  • 如果用java使用es
  • 使用Elasticsearch处理大量数据,如何翻页查询
  • python与excel第五节 打印excel
  • 需求:JSON数据显示null值或者不显示null值
  • 代码随想录笔记|C++数据结构与算法学习笔记-栈和队列(二)|239. 滑动窗口最大值、347.前 K 个高频元素
  • 网络安全(黑客)—2024自学手册
  • 在Windows中安装wsl2和ubuntu22.04
  • 【DevOps】探索微服务架构背景下的 API 延迟问题
  • 60、服务攻防——中间件安全CVE复现weblogicJenkinsGlassFish
  • 深度学习pytorch——感知机(Perceptron)(持续更新)
  • 使用conda创建python 虚拟环境
  • Python高级语法
  • 云计算系统等保测评对象和指标选取
  • 自己简单写的 事件订阅机制
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • Fabric架构演变之路
  • HTTP请求重发
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • Nacos系列:Nacos的Java SDK使用
  • nodejs实现webservice问题总结
  • springMvc学习笔记(2)
  • vue-router 实现分析
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 关于Java中分层中遇到的一些问题
  • 基于web的全景—— Pannellum小试
  • 解析带emoji和链接的聊天系统消息
  • 聊聊hikari连接池的leakDetectionThreshold
  • 驱动程序原理
  • 走向全栈之MongoDB的使用
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • ​第20课 在Android Native开发中加入新的C++类
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #android不同版本废弃api,新api。
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (七)Java对象在Hibernate持久化层的状态
  • (四) 虚拟摄像头vivi体验
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (原創) 物件導向與老子思想 (OO)
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .NET : 在VS2008中计算代码度量值
  • .net mvc 获取url中controller和action
  • .NET 反射的使用
  • .netcore 如何获取系统中所有session_如何把百度推广中获取的线索(基木鱼,电话,百度商桥等)同步到企业微信或者企业CRM等企业营销系统中...
  • .NetCore部署微服务(二)
  • .NET开源项目介绍及资源推荐:数据持久层 (微软MVP写作)