乐于分享
好东西不私藏

C/C++上机考试生存指南——无插件 VS Code 调试流

C/C++上机考试生存指南——无插件 VS Code 调试流

ke 

考场生存指南——无插件 VS Code 调试流

前言

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

学校机房的老东西,浅色背景、点阵字体,输入左括号还不会补全右括号

本篇介绍一种纯命令行驱动的方案,核心原理只有一句话:利用评测机宏定义实现本地/在线环境自动切换。

原理简介:(以BUAA-OJ为例)在线评测机的编译指令是

语言
编译命令
C
gcc main.c -O2 -std=c99 -DONLINE_JUDGE -o main
C++
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. 1. Ctrl + Shift + P -> 输入 Select Default Profile
  2. 2. 点击 Terminal: Select Default Profile
  3. 3. 选择 Command Prompt
  4. 4. 点击终端面板右上角的“垃圾桶”图标关闭当前窗口,按 Ctrl + ` 重启。
  5. 5. 看到路径前缀是 C:\...> 而不是 PS C:\...> 即可。

3. CMD 终端指令

注意:在 VS Code 终端右上角切换为 Command Prompt (CMD)

如果是 A.c 把 g++ 换成 gcc 就行了

假设代码为 A.cpp

任务
指令
A. 本地编译 (带调试)
g++ A.cpp -o A.exe -g -Wall
B. 运行程序
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. 1. 文件准备:在同目录下新建 A.cppin.txtans.txt(将题目给的样例输入和答案分别粘进去)。
  2. 2. 循环调试:
    • • 修改代码 -> 一定要 Ctrl + S
    • • 第一次运行要完整输入 g++ A.cpp -o A.exe -g -Wall && A.exe
    • • 第二次之后在终端按 向上方向键 + Enter 即可
    • • VS Code 会自动刷新 out.txt 里的结果,手动对比。
  3. 3. 死循环处理:如果程序卡住,在终端按 Ctrl + C 强制停止运行。
算法期末考试前15min Fauci 的 vscode

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

可以看出,这里的vscode只发挥了一个“文本编辑器”的功能,如果连vscode都没有的话,根据上述原理完全可以用notepad3 + cmd命令行。。不过 vscode / gcc & g++ 都没有的话,还是换台电脑吧。。
本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » C/C++上机考试生存指南——无插件 VS Code 调试流

评论 抢沙发

7 + 4 =
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
×
订阅图标按钮