NOI Linux 2.0 CSP奥赛复赛环境安装使用指南

新人旧人区别

以下是可能导致你在老版 NOI Linux 系统下形成的习惯在新版下翻车的改动。

  • 移除了 GUIDE
  • 从 32bit 变为了 64bit 系统,需要注意指针现在占 8 字节而不是 4 字节
  • 更新了编译器版本
  • 默认情况下右键没了【新建文件】的选项
  • 桌面目录改为中文,可能会导致一些程序无法运行

主要变化

  • 系统基于了 Ubuntu 20.04 (64bit)
  • g++ 升级到了 9.3.0
  • 添加了很多编辑器,例如 Sublime,VSCode,Code::Blocks

安装

和旧版无区别,主要就是官网上说了安装时要断网,可以通过在虚拟机软件安装时把虚拟网卡断开的方式。

Edit:现在已使用了该系统进行了CSP和NOIp,是否联网更新因考场而异,NOI时如何实施尚不清楚。若可以联网更新,强烈推荐使用VSCode并安装C/C++插件进行编程

中文目录

这个系统如果选择中文安装,桌面这个目录会是中文的。

然后这带来了很多问题,一是你在终端里敲很麻烦,二是有些程序可能用不了。

请不要在桌面上建立文件编程,以避免不必要的麻烦,据我测试,已知 Code::Blocks和 Gedit 的编译是会出问题的。

右键菜单新建文件

如果需要的话,可以终端里输入

xdg-user-dirs-update --set TEMPLATES ~/Templates/
touch ~/Templates/newfile

即可。

然后重启文件管理器(可以终端输入 killall nautilus)然后你就会发现右键菜单里【新建文件】回来了。

壁纸

默认壁纸是一张极丑无比的纯黑壁纸?没关系,可以进入【设置——背景】更换。

有趣味壁纸,比如这个:

编辑器

说一句题外话,我很喜欢 GUIDE,很不理解为啥会删掉它,可能它在很多地方令人难受,但是它可以对于每个文件单独设置编译选项,且不需要额外配置,对于我这种对于一个代码经常更换编译选项的选手真的是很好用。

一般上来讲,我认为考场上不应花费超过 5 分钟来配置编辑环境。尤其是像 NOI 这种比赛,开考前不可以动键盘,不可以登录系统,所以任何配置这些东西的时间都会占用你的有效比赛时间,我这里推荐使用一个可以较快速配置完成,且不明显拖累编码效率的即可。所以我这里不介绍需要大量配置的使用方式。

还有我觉得这些编辑器默认字体都挺好看的,如果觉得不好看的可以自行查找一下修改字体的方式。

另外,下列编辑器中有一些打开大文件的时候会卡死,请做好测试,避免在未保存代码时打开过大的样例,以免数据丢失

若真正卡死了,这个版本的 ubuntu 会在足够长的时间后弹出未响应提示,大多数情况应该不用手动 killall 了,当然如果你没有听劝,里面还有未保存的代码,那只能多等个几分钟,看看能不能恢复,然后赶紧保存 ,再不行就彻底寄了。

VSCode

很不幸的是,CCF 提供的 VSCode C/C++ 插件是一个在线安装版本,真实竞赛中完全没法用,所以...听说你想要超好用的 VSCode?没门的啦!

虽然这么说,但没有 Intellisense 和 Debug 的 VSCode 也是可以用的,虽然编译需要手动去命令行里敲,调试也要命令行 gdb,但论语法高亮和自动缩进和括号补全这方面还是可以的。

当然你也可以手写JSON实现一个编译运行指令,具体我就不细说了,还蛮复杂的,网上搜一下即可。

设置里也可以捣鼓一堆东西,比较有用的有自动保存【Auto Save】。

值得一题的是它内置的查找功能挺好用的,在查变量重名的时候很有效。右边三个开关分别代表是否区分大小写,是否强制搜索单词(两边都有空白字符),以及是否启用正则。

基本上常规使用方法就是像这样,用自带的终端编译运行所有文件的样子。

优点
  • 有着简单的语法高亮,编辑体验好
  • 有自带的文件管理器,可以方便的新建文件
  • 几乎不需要设置
  • 自带终端
缺点
  • 不自带编译功能,若实现需要手写JSON
  • 不自带调试功能

Sublime Text

感觉和 VSCode 体验差不多?不过自带一手单文件编译指令。但我没咋用过,所以不多评价。

但感觉真的和 VSCode 差不多啦,要自定义编译也必须手写JSON。

优点
  • 有着简单的语法高亮,编辑体验好
  • 几乎不需要设置
缺点
  • 修改编译选项需要手写JSON
  • 不自带调试功能

Geany

Geany 基本上开箱即用,但有一些我认为很好用的插件可以开。

【工具-插件管理器】里面可以打开插件

一些好用的有:

  • 【Auto-close】括号补全
  • 【Auto-mark】符号高亮

F9 编译 ,F5 运行,运行会弹出一个终端,注意没有编译+运行,需要连按两个。

在 【生成-设置生成命令】里面可以设编译选项。

不过有个比较毒瘤的事情就是这玩意 Warning 和 Error 的显示一样,注意看一看。

然后那个下面那个写着编译器的那一栏的上下箭头是可以点的,点到最下面有个自带终端。也可以把下面那一栏拉长全部显示出来。

优点
  • 有着简单的语法高亮,编辑体验好
  • 几乎不需要设置
  • 自带终端
缺点
  • 不自带调试功能

Code::Blocks

因为这玩意貌似是自带调试的所以重点研究了一下

首先如果打开单文件只有默认编译选项,无法调试,所以不可避免的需要新建一个项目文件。

先选择 【File-New-Project-Console Application】建立一个新项目,然后title选择题目的名称,然后 Folder 选择你这个比赛规定的存放该题的文件夹的父目录,其它的一路默认下去。

然后你就有了一个项目。首先你会发现它给你创建了个 main.cpp,因为 OI 比赛中一般需要一个固定的名字才能正确收上去,所以需要改名字。首先先把这个文件关掉。然后在左边右键这个文件,选择【Rename File...】,改成该题目的名称。

然后,基本的配置就搞好了。

接下来就是如何设置编译选项,这次在左边右键这个项目的图标,然后点【Properties...】。

然后点进【Build Targets】,这个页面里的 【Build options...】点开即可,可以分别为【Debug】和【Release】设置编译选项,而这两个东西可以理解为两个模式,比赛时可以用【Debug】作为开了类似 -g 的选项用于查错的那个,而【Release】开题面所示的编译选项,反应真实效果。(当然也可以根据需求用左边的 【Add】加入更多模式。)

当然那些给出的选项并不一定需要用它,可以用下一栏的【Other Compiler Options】直接写也是可以的。

那么现在已经配置好了,你可以在顶上的选项框里切换编译模式,然后可以按那个黄齿轮绿箭头分别代表编译,运行,编译运行。

然后右边的那个红箭头可以开始调试,调试时可以点调试框右边这个电脑上有个虫子的图标中的【Watches】打开变量查看。注意调试时必须开 -g 编译哦(【Debug】模式编译)

总之具体使用方式还是蛮复杂的,毕竟这是一个庞大的IDE,大家可以自行摸索。

当然,你也可以只拿它调试,就新建一个工程然后就不改其它设置,有需要的时候把代码复制进来调,这也是可以的。总之这似乎是唯一一个可以拿来调试的。

优点
  • 自带调试功能
  • 有着简单的语法高亮,编辑体验还行
缺点
  • 自动缩进可能有点怪(?)
  • 配置麻烦,必须配置一个项目才可以。比较笨重。

其它

Vim 和 gedit(现在就叫文本编辑器)还有 Emacs 还在,喜欢用的继续用就好了,应该没有太多改变。

总结

提供了 VSCode 却不提供可以正常使用的 VSCode C/C++ 插件。

编译器

编译器升级到了 g++ 9.3.0 可以整啥花活呢?

强大的 sanitizer

编译选项加入 -fsanitize=address,undefined 可以体验绝佳的查 RE,查 UB 的体验。

当然如果编译器和链接器分开需要在链接器里加上 -lasan -lubsan 才可以用(指 Code::Blocks)

可以实现:数组越界直接 RE,有符号整数溢出直接 RE,返回值不为 void 的函数不 return 就返回直接 RE...总之就是可以查 RE 和 UB,且能告诉你错在了第几行 。相信我,会上瘾的。

优化

编译器优化更聪明了,虽然可能感知不强

C++14/17

应该以后正式比赛能用上?

Edit:已确认:以后会用C++14

Arbiter

arbiter 好像更新了?让我看看有啥区别。

内存限制最大值从 512MB 变到了 2048MB。不过这个好像似乎已经内部被修改过了(参见之前 NOI 里面都有 1GB 的空间限制)?

好像还改了改图标。

所以似乎并没有区别。

终端命令

基本没变,常用的能用的都用。不能用的也不能用,除了...

ssh

喜闻乐见.jpg

其实 ssh 命令并没有被删,只不过 ssh 服务不开放,也就是你还可以 ssh 其它系统,但这个系统不能被 ssh 到了。

试着给虚拟机和实体机开一个网络测试了一下,不太行。

猜你喜欢

转载自blog.csdn.net/abilix_tony/article/details/131949315
今日推荐