给新生的编程工具推荐与基本使用方法

此帖面向大一新生刚入门的编程小白, 作为编程工具的常规推荐, 大佬请直接无视orz.

主要讲解一下 Visual Studio CodeVisual Studio 的基本使用.

前言

作为一个合格的网络空间安全专业本科生, 平常课程作业中最常使用的编程语言应该就是 cpython. (信息安全专业也可以参考)

c 应该会伴随你四年的本科生涯, 并且将会是大部分人接触的第一门语言, 大一也会有一门课叫 "C语言程序设计", 这个课包括理论课与实验课两个课头, 相信大家还是会学有所获的.

python, 就我这一届来看, 并没有开设和 python 相关的语言课程, 但是, 从速通网安的角度来说, python 是非常推荐学一下的, 毕竟有很多现成的库, 网上的相关资源也非常丰富, 同时很适合做各种课程大作业. 人生苦短, 我学python.

所以就我四年的本科使用经验来说, Visual Studio CodeVisual Studio 用来写上述两种语言的体验还是非常舒适的, 所以在此进行推荐和软件的使用方法入门.

Visual Studio Code

首先是 VS Code. 从本质上来说, VS Code 是一个多功能的文本编辑器, 不管你是否需要写代码, 我都建议你在电脑上装一个, 可以极大的提高你的文本处理效率. 珍爱生命, 远离记事本.

安装

官网地址是 https://code.visualstudio.com/. 进去之后的界面现在长这样.

vGcccj.jpg

可以直接点 Download 下载然后快速安装, 不过我不是那么的推荐, 因为直接点下载的是 User 版本, 可能会有奇怪的权限问题. 推荐下能够获取系统权限的版本比较好, 并且可以安装在系统目录.

所以按下图直接点到其他版本的选择页面, 选 64 bit System 版本下载.

vGgPvd.png

vGgNPU.png

下载完之后点击安装, 接下来提一下几个比较有用的安装选项, 可以极大的提高你的使用体验.

vGRJ9U.png

这个界面上的选项建议全勾上, 第 2 个和第 3 个选项可以在你的右键菜单里添加 "通过 Code 打开" 的选项, 这样子你可以很方便的直接使用右键点击文件或者文件夹或者文件夹的空白处, 然后把他们在 VS Code 中打开进行操作.

第 5 个选项平常不会怎么用到, 但是保持默认选项勾上就可以了, 它可以让你在命令行中用 Code 进行操作

一路下一步, 然后就安装完成, 之后可以选择重启一下电脑让一些配置立即生效, 不过不重启也没关系, 没啥影响.

基本使用

首先说说平常写代码时候, 一般来说都是至少以一个文件夹作为最小单位来操作 (除非真的是非常临时的一份小脚本, 否则都推荐弄个文件夹舒服, 里面不仅放代码同时也放代码要引用和生成的其他文件).

这个文件夹就是你的项目文件夹, 一个 Project, 之后会在这个基础上开展你后续的 Coding 工作.

所以基本上你要写点啥课程大作业代码的时候, 第一步就是找个地方新建一个文件夹, 然后用 Code 打开. 这里用一个叫 "example" 的文件夹作为示例, 讲解一下 VS Code 的基本使用方法.

插件安装

不管你是用通过右键打开的项目文件夹还是从 "文件" 菜单栏打开的, 之后的界面都应该和下面的图长得差不多, 一片空白.

vJ85wR.png

然后我们选到左边的长得像方块的图标, 也就是扩展, 开始按照工作需求自定义我们的 VS Code.

vJGk6g.png

可以看到这里已经有一个扩展了, 这也是我们下载 VS Code 几乎必装的一个扩展, 中文汉化扩展, 如果没有预装, 则直接搜索对应的扩展名字装上就可以了. 英语大佬请无视中文扩展.

装完会提示重新启动 VS Code 加载, 之后的界面就会像我图里那样全中文了.

然后是编程语言扩展, 这也是最基本的东西, 需要用 VS Code 写什么语言的代码就装什么语言的扩展, 一般直接装 Microsoft 官方的或者 Star 最多的就行.

由于 VS Code 之后基本上用来写 python, 因此这里把 python 扩展先装上, 日后有需求可以自行举一反三.

vJGj3T.png

安装完成之后可能会弹出来一些 Get Start 页面, 不用管, 不过有时间的话可以稍微翻一翻, 也是一些新手教程.

第一份代码

vJJhI1.png

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
def add(a, b):
return a + b

def sub(a, b):
return a - b

def mul(a, b):
return a * b

def div(a, b):
return a / b

if __name__ == "__main__":
num1 = add(2, 3)
num2 = mul(num1, 7)
num3 = sub(num2, num1)
num4 = div(num3, num1)
print(f"Result: {num4}")

新建一份文件, 然后随便敲一点东西之后, 得到了现在的 main.py 文件. 下面说说对这份文件最简单的运行和调试.

运行

有很多方法可以运行, 这里只说两种最简单的, 一是靠鼠标或者快捷键, 二是在命令行里敲命令.

vJYkZj.png

图内可以看到菜单栏有个运行选项, 点开就是两个, 一个叫 "启动调试" (F5), 另一个是 "以非调试模式运行" (Ctrl + F5).

前者是调试, 后者是单纯的运行, 对于我们来说, 只需要点击后者, 或者直接快捷键 Ctrl + F5, 就可以看到运行效果了.

vJY3w9.png

自动弹出了一个终端, 并且成功的打印出了我们的结果. 到这里第一种方法就结束了, 更多细致的功能日后再慢慢探索吧.

然后是第二种方式, 自己在命令行里敲命令, 那么首先需要知道怎么把终端调用出来.

vJYBeH.png

vJYyFI.png

vJY4mQ.png

如上图新建一个终端, 然后敲入指令 python main.py, 同样输出了我们的运行结果. 可以看到, 新建的终端会自动打开到我们的项目文件夹目录, 所以可以直接访问到里面的内容, 而我们的所有命令, 也都是基于项目文件夹作为根目录来运行的. (这一点很重要, 如果命令行的工作目录和项目文件夹不一致, 可以自己手动 cd 切换一下, 可以免去写代码时带来的一些路径问题)

调试

这里简单的调试一下这份文件, 打一下断点, 查看一下运行中变量.

所谓断点, 就是你在调试的时候需要让程序停在哪个点, 从而在某个点可以查看程序的运行情况, 快速定位问题来源.

打上断点的方式也很简单, 比如在第 15 行停下, 那么只需要在行号左边点一下就可以了, 这样子当程序运行到第 15 行的时候, 会停下, 且第 15 行不会执行, 是即将要执行的语句.

vJtKht.png

然后, 从运行菜单里选择 "进行调试" 或者快捷键 F5, 会弹出提示让你选择要使用的调试配置 (因为我们没有给这个项目设定自己的调试配置, 所以需要选择一种系统提供的默认调试配置), 这里直接选第一个就行了.

vJtyB4.png

不出意外的话, 程序会稳稳的停在第 15 行, 并且左边跳转到了调试面板, 显示了各种调试信息.

vJtouD.png

  • 变量: 显示了各种局部或者全局的变量值.
  • 监视: 可以手动输入一些变量或者表达式来进行单独观察.
  • 调用堆栈: 显示了函数之间的嵌套调用关系.
  • 断点: 显示当前所有的断点信息, 有三种固有断点, 和程序的报错有关.

这里可以看到, 左边变量里, 显示了一个局部变量 num1 等于 5, 这和我们的预期是一致的, 并且第 15 行尚未执行, 所以还没有 num2 这个变量.

然后是调试过程中可以使用的基本操作, 可以看到上方多出来一个条, 有各种调试按钮.

程序执行过程中, 可能会遇到函数调用, 如果我们需要进入这个函数进行调试, 查看这个函数的内部情况, 则需要使用 "单步调试", 即一步一步执行, 进入函数内部.

而当你在当前函数内部查看完情况之后, 可能函数还剩很多没执行完, 这个之后需要使用 "单步跳出", 直接快进到把当前函数执行完成.

有的时候你完全不想进入某个函数, 想直接执行一整行, 这种时候可以使用 "单步跳过".

最后, 如果你这一片代码已经调试完成, 需要直接快进到下一个断点, 使用 "继续" 则会将程序继续执行, 直到再次遇见断点则停下, 或者直接执行到程序结束.

这些调试按钮配合左侧面板的调试信息, 可以很清晰的知道程序的执行步骤以及每一步的变化情况, 是解决代码 bug 的利器, 闲暇时间可以多尝试几次, 熟悉调试过程和操作.

Visual Studio

第二个推荐的编程工具是 VS, 相比于 VS Code, VS 更加臃肿但是功能更加强大, 如果用习惯了, 在 Windows 平台上写 c 语言之类的课程作业, 将会是无比舒适.

安装

VS 的安装分成两步, 首先是安装它专属的 Installer, 然后再决定安装具体的 VS 内容.

官方网站是 https://visualstudio.microsoft.com/, 目前是 2022 的最新版本, 下的时候选择 Community 版本下载, 这个版本是面向个人免费使用的, 只需要注册微软的账户就可以授权给个人了.

vJ5QCq.png

这个东西下完之后是 VS 的 Installer, 直接无脑装好然后运行, 会进入如下的选择界面. (找不到就去开始菜单里翻, 它是不会有桌面快捷方式的)

vJI6S0.png

vJIfw4.png

默认会直接进到第二张图, 如果不是的话按第一张图自己选安装.

对于我们日常写写作业来说, 我们只需要能够写 c 语言就够了, 所以只需勾选下面其中的一个就完全足够使用了, 那就是 "使用 C++ 的桌面开发". 虽然写的是 c++, 但是其实写 c 也是用这个写的, 只要你创建源文件的时候, 后缀名自己改成 .c 而不是 .cpp, 这样子编译的时候就会换成 c 的编译方式.

vJIqOO.png

这一坨子东西装下来还是要一点空间和时间的, 推荐电脑有空闲时间的时候慢慢挂机安装, 安装完之后重启一下电脑, 让一些系统项生效.

基本使用

打开装好的 VS, 我们开始用 c 写一个 Hello World 程序程序员绕不过去的新手代码.

首先会跳出来这个界面, 我们直接选择创建新项目.

vJOeqP.png

然后是选择项目模板, 模板类型有很多, 但是我们选择最简单的 "空项目", 这样子可以后续自己手动创建文件, 了解一下具体的项目结构.

然后是设置名称. 这里有两个内容可以自定义, 一个是项目名称, 一个是解决方案名称.

VS 里面创建项目时, 顶层结构不是 "项目" 而是 "解决方案", 这是与 VS Code 不同的一点. 一个 "解决方案" 是一个更大的容器, 里面可以包含很多的 "项目", 然后每一个 "项目" 是一个个单独的内容, 用不同的文件夹分门别类的区分开来.

这样子的好处就是, 适应性范围更广, 能够很方便的做多个项目之间的互相调用, 比如你可以一个项目用来写测试, 另一个项目是你实际上要写的代码库.

这里我们把 "解决方案" 的名称设为 "example", 把项目名称设置为 "c_project". 这样子实际的物理结构就会是一个 example 的总文件夹下面还有一个 c_project 的项目文件夹.

vJXf00.png

创建好之后大概长下图所示, 解决方案资源管理器位置可以自己调, 我调左边去了, 视图菜单里也可以手动显示出来.

vJXztO.png

认识解决方案资源管理器

VS 里面的解决方案资源管理器是一个集合了非常多功能的管理器, 需要熟悉一下它提供给我们的基本功能.

管理器的顶层是解决方案, 也就是刚刚我们命名的 example 文件夹, 然后列出来了里面包含的所有项目, 目前只有一个项目, 就是一起创建的 c_project.

目前看到的这个视图是 "解决方案视图", 是解决方案内的逻辑结构而不是在磁盘上的物理结构.

那么我们首先尝试创建一份 main.c, 并写几句代码.

右键 "源文件", 选择 "添加", 然后选择 "新建项", 选择源文件, 同时把文件名设为 main.c. 然后键入经典的 Hello world 程序代码.

vJjO2Q.png

vJviPU.png

vJvKIK.png

可以看到左侧已经成功的在源文件项下面多出来了一份 main.c. 但是刚刚说了目前的界面是解决方案的 "逻辑结构", 所以我们需要切换一下视图, 看看刚刚创建的文件究竟在哪.

vJv6Ln.png

管理器的上方有一个切换视图按钮, 点击之后可以选择是 "解决方案" 还是 "文件夹视图", 我们直接换到文件夹视图.

vJv4WF.png

这个时候就非常清晰了, 顶层文件夹 example, 次级项目文件夹 c_project, 然后在项目文件夹内有一份 main.c.

切回解决方案视图, 现在再看 "源文件" 这一项, 它其实只是人为设置的一个分类结构, 在 VS 里叫 "筛选器", 可以在不影响物理结构文件实际路径的同时给开发人员一个合适的文件分类方法, 可以右键新建里添加新的自定义筛选器.

编译

既然是写 c 语言, 运行前必不可少的步骤就是编译, 那么首先我们要知道, VS 是如何知道哪些文件是需要被纳入编译范围的.

一个最简单的设置方法就是将文件或者文件夹设置是否包含在项目中. 解决方案视图只会显示在项目中的内容. 即使文件实际上在项目文件夹内, 如果不在项目中, 那它也不会纳入 VS 项目的各种判断逻辑中, 比如不会参与编译.

vJxqXj.png

这种方式可以很轻松的把文件排除项目. 那么对于添加到项目里, 比如需要添加现有的文件与源代码, 我们需要首先把对应的文件在物理上移到我们的项目文件夹内合适的地方, 然后使用管理器切换到 "所有文件" 视图.

vJzQjH.png

如果刚刚把 main.c 排除了, 那么就会像图上那样有个红色符号, 表示这个文件没有纳入项目逻辑考虑范围. 我们可以用右键把它重新包含到项目内, 这样子红色符号就消失了, 解决方案视图里也能重新看到这个文件了.

当确定了那些文件被包含到项目中后, 就可以开始编译了.

有两种方式会进行编译, 一种是直接运行或者调试程序, 如果项目没有被编译, 则会先进行编译, 再运行程序. 另一种就是只编译不运行, 分步骤进行.

我这里还是推荐分步骤进行, 先编译看看是否存在什么警告或者错误, 再进行运行或者调试.

编译的时候有一些基本选项可以调整.

vtQxRU.png

x86x64 好理解, 指的是编译出来的二进制文件是 32 位程序还是 64 位程序, 一般来说调成 x64 会让程序能更充分利用现在的 64 位处理器性能.

ReleaseDebug, 翻译一般叫 "发布" 与 "调试". 调试版本是适合于调试代码的版本, VS 在编译时会加入很多调试信息进入最终的二进制文件, 能够在调试时充分的获得程序运行的每一步信息. 而 "发布" 则是适合最终运行的优化版本, VS 会在编译时尽可能的减少代码冗余, 对代码结构进行优化, 提高最终程序的运行效率.

所以写代码的时候用 Debug 版本, 而交程序的时候用 Release 版本. (这两个版本的运行效率差异非常大, 如果你觉得代码太慢, 不妨试一下 Release 来尝试提高效率. 说不定有奇效)

然后进入编译的正题. 选择菜单栏里的 "生成", 在这里可以对解决方案和每个项目进行生成操作. 此处 "生成" 不一定指编译, 而是去生成每个项目的目标文件, 对于 c 语言来说就是编译链接操作.

选择生成整个解决方案, 则 VS 会按照项目间的依赖关系依次生成方案内所有的项目. 选择生成某一个项目, 那就是生成单独的一个项目. 每次可以选择 "重新生成" 或者 "生成", 前者会先进行一步 "清理" 操作, 把上一次生成时产生的所有文件先清除再进行生成.

一般来说, 直接使用快捷键 Ctrl + B 即可, 会生成当前正在操作的项目.

vtlezD.png

vtlnQe.png

运行一下生成, 可以看到下方的输出里显示生成成功, 并且也输出了生成的二进制文件的路径.

运行与调试

这里就简单说说, 不赘述了, 因为同为微软家的产品, 基本概念和快捷键都是一样的, 具体的操作和前面 VS Code 中说的大同小异, 几乎是一致的. 这里就放一下成功运行截图了.

按下快捷键 Ctrl + F5, VS 就会自动弹出来一个运行黑框了, "Hello world!"

vtlJW8.png

后话

这一篇就打算写这么多了, 第一次写这种新手教程额, 尽可能的按照一个没有接触过编程但是来到了网安学院的大一新生视角来写, 希望能够有所帮助, 快速入门吧. 上啊, 卷死他们!