NOI Linux 2.0 竞赛环境食用指北
终端
使用 Ctrl+Alt+T
在当前登录用户的目录 ~
中打开终端,也可以在文件夹中 右键
或 Shift+右键
在当前文件夹打开终端。
运行可执行文件需要加 ./
,例如 ./<filename>
。注意 Linux 中可执行文件是没有后缀名的。
mkdir
新建目录,ls
列出目录,cd
切换目录。但建议在图形化界面下操作。
可以将文件拖到黑窗中快速索引文件路径。
Ctrl+C
杀掉当前终端中运行的进程。
快捷键
这些都跟 windows 下一样。
Win+D
显示桌面。
Alt+Tab
切换窗口。
Win+Space
切换输入法。
注意新建文件夹不能使用 Ctrl+Shift+N
。
编译
g++ <filename>.cpp -o <filename> -std=c++14 -g -Wall -Wextra
。
可以加上 -fsanitize=address,undefined
检查数组越界和未定义行为,它会在运行出现错误时往终端中丢出信息。
不过注意程序运行时间会增加。
在当前终端中开大栈 ulimit -s unlimited
。
编辑器
Code Blocks
一款自带调试功能的 IDE。
我不会用,界面好复杂而且好丑。
优点:自带 gdb
调试。
缺点:需要建项目,字体丑手感差。
VS Code
断网安装的环境的 VS Code 没有配置 tasks.json
,因而不能生成和调试,但可以尝试默写调试文件。
不过也可以当一个不错的编辑器,自带好看的字体和颜色与好用的补全,而且它自带终端。
优点:自带终端,有好用的补全。
缺点:缺少配置文件不能生成和调试。
Geany(推荐)
下方状态栏拉到最下面有自带的虚拟终端,左侧边栏有一个文件资源管理器。
快捷键 F9
编译,F5
运行。
可以在 生成-设置生成命令
的 c++命令-build
一栏设置编译选项。
Shift+F9
还可以运行文件所在目录下的 makefile
。
好像没有括号补全?有的,点击 工具-插件管理器
选择 auto-close
即可。
其他快捷键:Ctrl+F
查找,Ctrl+H
替换,Ctrl+K
删除一行。
优点:自带终端,可以方便设置编译选项。
缺点:没有 gdb
。
Sublime Text(推荐)
注意到时没有中文的。
按 Ctrl+Shift+B
选择生成方式,选择 make
可以执行 makefile
。
而选择 single c++ run
则以普通方式编译加运行。
之后在按 Ctrl+B
可以执行之前选择的生成方式。
注意 Sublime Text 虽然自带终端,但终端是不能标准输入的,这意味着需要文件读入。
而标准输出和 cerr
都可以显示在终端中。
注意它有一个打开文件夹功能,貌似是一个文件资源管理器是吧,但是注意你不应同时使用打开文件夹并且使用 makefile
,因为它会在你打开的文件下运行 makefile
,而不是在当前文件所在的目录下运行 makefile
,这会导致 make
失败。
其他快捷键:Ctrl+F
查找,Ctrl+H
替换,Ctrl+Shift+K
删除一行。
优点:自带单文件编译运行,还可以 makefile
,并且有好看的界面与好用的代码补全。
缺点:终端不能输入,无 gdb
。
makefile
讲一下怎么写 makefile
文件。
在需要编译的文件所在目录下放一个名为 makefile
的文本文件,不需要后缀。
makefile
的格式为
[目标] : [依赖1] [依赖2] ...
[Tab] [命令行命令]
它会检测依赖与目标的保存时间,如果依赖更新,那么会执行命令。
如果要编译那么就是:
<filename> : <filename>.cppg++ <filename>.cpp -o <filename> -g -Wall -Wextra
我们还可以编译后运行:
run : <filename>./<filename>
<filename> : <filename>.cppg++ <filename>.cpp -o <filename> -g -Wall -Wextra
再配合上加栈与检查越界的选项,那么就是:
run : <filename>ulimit -s unlimited
<filename> : <filename>.cppg++ <filename>.cpp -o <filename> -g -Wall -Wextra -fsanitize=address,undefined
注:makefile
会检查目标与依赖的时间差异,这意味着,如果源文件没有改变,它就不会重新编译,这可以加快编译运行的速度。
工具
gdb 调试
gdb <filename>
打开文件并调试,<filename>
是可执行文件名。
源代码:l
列出源代码。
l x
列出第 x
行附近的源代码,l name
列出函数 name
附近的源代码。
断点:b x
在第 x
行插入断点。
d x
删除编号为 x
的断点,d
删除所有断点。
info breakpoints
查看当前所有断点。
运行:r
运行,c
跳至下一断点,n
下一行,s
单步进入,q
退出调试关闭 gdb
。
until x
跳至第 x
行。
打印:p x
打印变量 x
,p *x@100
打印 x
数组的前 100 项。
disp x
添加查看变量 x
,每次单步都会显示值。
undisplay
解除所有查看的变量。
python3
终端输入 python3
回车打开 python
。
python3 <filename>.py
运行 .py
文件。