在这篇文章中:
粗体:按钮、菜单的名称
粗体 + 斜体:视图的名称
1. 创建共享文件夹
可以将宿主机中的一个文件夹或者一个分区共享到虚拟机内,比如将 D 盘下的考生文件 SD−S00000 共享给虚拟机,使得虚拟机可以操作本地文件。
选择菜单栏 虚拟机 > 设置 或按下 Ctrl+D。
转到 选项 > 共享文件夹,选择 总是启用,并点击 添加 添加共享文件夹。
打开 Linux 中的 文件,点击左侧的 + 其他位置,选择 计算机,转到 /mnt/hgfs/<共享文件夹名称>,即可看见共享内容。这个文件夹中的内容会与本地磁盘内容 同步读取、存储。
2. 在 NOI-Linux 中编译程序
在程序 cpp 文件所在的文件夹空白处点击右键,选择 在终端打开。
现在,假设你有一个名为 hello.cpphello.cpp 的源文件,则最简单的编译指令为:
g++ hello.cpp -o hello
Bash当然,这只能简单的将文件编译为二进制。下面是更为高级、通用和实用的编译指令:
g++ 编译选项 hello.cpp -o hello
Bash其中编译选项可以填入:
-std=c++14
:使用 C++14 标准-O2
:开启 O2 优化-g
:开启调试选项-Wall -Wextra
:对更多内容发出警告,用于检查代码中的一些低级错误(比如 int a == 1int a == 1)-fsanitize=address
:(与-g
不兼容)十分实用的数组越界检测工具,当数组越界时会自动提示-fsanitize=undefined
:(与 -g 不兼容)爆 int /long long 检测工具
以下是在 Linux 下常见而在 Windows 下不常见的报错(学有余力):
wrongs.cpp:6:18: error: reference to ‘lock’ is ambiguous
6 | scanf("%d", &lock;[1]);
| ^~~~
⨽> 变量名 locklock 已经在别的地方以别的数据类型以全局变量的方式定义了(如 STL)
wrongs.cpp:10:11: warning: ‘x’ is used uninitialized [-Wuninitialized]
10 | printf("%d", x);
| ~~~~~~^~~~~~~~~
⨽> 变量名 xx 定义为局部变量但是在使用前没有初始化(脏内存)
wrongs.cpp:11:10: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
11 | if(x = 1) {
| ~~^~~
⨽> 把双等号打成单等号
wrongs.cpp:11:7: warning: statement has no effect [-Wunused-value]
11 | x == 1;
| ~~^~~~
⨽> 这行语句没有任何作用(大多数情况是把单等号打成双等号)
wrongs.cpp:6:1: warning: no return statement in function returning non-void [-Wreturn-type]
6 | }
| ^
⨽> 本应该有返回值的函数没有 return
3. 使用 Code::Blocks 编辑程序
4. 使用 GDB 工具调试程序
假如你用 $\texttt{-g}$ 参数编译了一个程序 $\texttt{hello}$,则在终端输入:
gdb -q hello
Bash即可开始调试程序。
下面我们以以下的代码作为示例进行调试,
#include <bits/stdc++.h>
using namespace std;
void print2() {
printf("2");
}
int main() {
printf("1"); // * Add breakpoint here
print2();
for(int i = 3; i <= 5; i++) {
printf("%d", i);
}
return 0;
}
C++输入 $l$ 可以查看源代码,输入 $b \space 9$ 可以在第 9 行添加断点。
现在,输入 $r$ 就会开始调试,运行到断点处暂停。
输入 $n$ 将执行下一行,输入 $s$ 将尝试进入函数内部,否则执行下一行。
输入 $p \space i$ 可以查看 i 的值。
输入 $u \space 14$ 可以让程序一直执行到第 14 行然后暂停。
下面是一个示例(“...” 后面的内容为注解):
(gdb) b 9 ... 在第9行添加断点
Breakpoint 1 at 0x11ca: file wrongs.cpp, line 9.
(gdb) r ... 运行程序
Starting program: /home/zhangborui/OI-Workspace/wrongs
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Breakpoint 1, main () at wrongs.cpp:9
9 printf("1");
(gdb) n ... 单行调试
10 print2();
(gdb) s ... 进入函数
print2 () at wrongs.cpp:5
5 printf("2");
(gdb) n ... 单行调试
6 }
(gdb) n ... 单行调试
main () at wrongs.cpp:11
11 for(int i = 3; i <= 5; i++) {
(gdb) n ... 单行调试
12 printf("%d", i);
(gdb) p i ... 查看 i 的值
$1 = 3
(gdb) u 13 ... 运行直到第13行
main () at wrongs.cpp:14
14 return 0;
(gdb) n ... 单行调试
15 }
(gdb)
5. 使用集成 IDE 开发环境 —— VSCode
按下键盘上的 Super 键(常被称为 Windows 键),可以打开 活动 视图。输入 vsc 三个字符并按下回车可以快速打开 VSCode。
2.1. 打开文件夹
点击 File > Open Folder / 文件 > 打开文件夹,选择一个文件夹打开(建议在共享文件夹内新建文件夹)。
没写完,咕咕咕……