C/C++上机考试生存指南——无插件 VS Code 调试流
ke
考场生存指南——无插件 VS Code 调试流
前言
你熟练掌握kmp、图论算法、计算几何,平时在自己的编程环境写得很熟练,但走进考场(机房),电脑上只有一个裸的
VS Code,没有一键运行 / 调试的插件,你又实在不想用devc++visual studio2010。你该如何像在自己的电脑上一样,快速进入“写码-调试-对比样例”的循环?

本篇介绍一种纯命令行驱动的方案,核心原理只有一句话:利用评测机宏定义实现本地/在线环境自动切换。
原理简介:(以BUAA-OJ为例)在线评测机的编译指令是
|
|
|
|
|
gcc main.c -O2 -std=c99 -DONLINE_JUDGE -o main |
|
|
g++ main.cpp -O2 -std=c++11 -DONLINE_JUDGE -o main |
这里的 -DONLINE_JUDGE 相当于在你的代码第一行强制加上了 #define ONLINE_JUDGE 。利用这一点,我们可以写出“两面派”的代码:本地运行时自动读入文件、输出调试信息;提交到 OJ 后自动关闭,避免产生额外开销或导致结果错误。
1. 代码模板
这是cpp的代码示例,如果纯c语言的话,直接复制宏定义部分的就行了
#include<bits/stdc++.h>#include<cstdio>// freopen 需要usingnamespace std;// 【调试宏】本地可见,OJ不可见// cerr 不受 freopen 影响,结果始终显示在终端屏幕上#ifndef ONLINE_JUDGE#define debug(x) cerr << "Line" << __LINE__ << ": " << #x << " = " << (x) << endl#else#define debug(x)#endifintmain(){// 【自动化重定向】// 自动从 in.txt 读样例,将 cout 的答案写进 out.txt#ifndef ONLINE_JUDGEfreopen("in.txt", "r", stdin);freopen("out.txt", "w", stdout);#endif// --- 代码逻辑开始 ---int a, b;while (cin >> a >> b) {debug(a); debug(b); // 屏幕看变量状态,要看哪个变量用哪个 cout << a + b << endl; // 文件看最终答案 }// --- 代码逻辑结束 ---return0;}
2. 终端配置:切换到 CMD
VS Code 默认的 PowerShell 处理 && 等符号有时会报错,建议切换到经典的 Command Prompt (CMD)。
-
1. Ctrl + Shift + P-> 输入Select Default Profile。 -
2. 点击 Terminal: Select Default Profile。 -
3. 选择 Command Prompt。 -
4. 点击终端面板右上角的“垃圾桶”图标关闭当前窗口,按 Ctrl + `重启。 -
5. 看到路径前缀是 C:\...>而不是PS C:\...>即可。
3. CMD 终端指令
注意:在 VS Code 终端右上角切换为 Command Prompt (CMD)。
如果是
A.c把g++换成gcc就行了
假设代码为 A.cpp
|
|
|
|
|
g++ A.cpp -o A.exe -g -Wall |
|
|
A.exe |
C. 一键 编译 + 运行 |
g++ A.cpp -o A.exe -g -Wall && A.exe |
| D. 比对答案 | fc out.txt ans.txt |
| E. 模拟 OJ 环境 | g++ A.cpp -o A.exe -O2 -DONLINE_JUDGE && A.exe |
技巧: 在终端按 向上方向键,可以直接调用上一条指令,无需重复输入。
如果输出行数特别多(如图论算法、多次查询),
D可能有用;E的话一般没用,因为各种调试语句都被#ifndef保护好了。
4. 考试工作流
考试期间
-
1. 文件准备:在同目录下新建 A.cpp、in.txt、ans.txt(将题目给的样例输入和答案分别粘进去)。 -
2. 循环调试: -
• 修改代码 -> 一定要 Ctrl + S -
• 第一次运行要完整输入 g++ A.cpp -o A.exe -g -Wall && A.exe -
• 第二次之后在终端按 向上方向键+Enter即可 -
• VS Code 会自动刷新 out.txt里的结果,手动对比。 -
3. 死循环处理:如果程序卡住,在终端按 Ctrl + C强制停止运行。

注意不要手动输入修改
out.txt, 不然程序没法覆盖。我这张截图就出现了这种问题。解决方案是按一下保存,把标签页右上角的那个圆点消去。这样才能正常使用。正常执行g++ A.cpp -o A.exe -g -Wall && A.exe后out.txt应该只有3,而且终端有调试字样Line19: a = 1.
夜雨聆风
