如何用在线编译器(OnlineGDB)编译、运行和调试 C/C++ 代码
OnlineGDB 是一个在线编译器与调试器,支持 C/C++ 等多种语言,用 gcc/g++ 编译、gdb 调试。如果你的目标是写完一段 C/C++ 代码后立刻编译运行,并且在出错时能单步跟踪变量,它可以在浏览器里完成整条链路,不需要本地装工具链。下面按“选语言 → 写代码 → 运行 → 调试 → 排错”的顺序说明。
选择语言和版本
进入编辑器后,在语言下拉框里选择目标语言。C/C++ 相关选项包括:
- C
- C++、C++ 14、C++ 17、C++ 20、C++ 23、C++ 26
- C (TurboC)、C++ (TurboC)
选择哪个版本取决于代码用到的标准特性。例如使用了 C++17 的结构化绑定,就选 C++ 17 或更高;如果代码是为老式 Turbo C 环境写的,则选对应的 TurboC 选项。语言选错通常表现为语法报错或找不到头文件,而不是运行结果错误。
编写并运行代码
编辑器默认会带一段 Hello World 模板。把它替换成你的代码,然后点击 Run 按钮。
点击 Run 后,界面下方会依次出现:
- Compiling Program...:正在编译
- input:等待你提供标准输入的区域
- stdout:程序的标准输出
- stderr:错误输出
如果程序需要从标准输入读取数据(例如 scanf、cin),必须在运行前或运行中把输入填到 Standard Input 区域,否则程序会一直等待输入,最终可能触发超时错误。
一个最小可运行示例:
#include <stdio.h>
int main() {
int a, b;
scanf("%d %d", &a, &b);
printf("%d\n", a + b);
return 0;
}
在 Standard Input 里填 3 5,Run 之后 stdout 应输出 8。
用 Debug 模式调试
点击 Debug 按钮进入调试模式,而不是 Run。进入后可以使用:
- 断点:在代码行号处设置,程序运行到该行暂停
- step over:执行当前行,不进入函数内部
- step into:进入当前行调用的函数
- step out:从当前函数返回到调用处
- continue:继续运行到下一个断点
- Call Stack:查看当前调用链
- Local Variables:查看当前作用域内变量的值
- Registers:查看寄存器值
- Display Expressions:手动添加要持续观察的表达式
调试时的典型流程是:在关键行设断点 → Debug → 程序暂停后检查 Local Variables → 用 step over/into 逐行推进 → 观察变量是否符合预期。如果变量值不对,问题通常就在刚执行过的那几行。
控制程序输入
OnlineGDB 提供三种输入方式:
| 方式 | 用途 |
|---|---|
| Command line arguments | 传给 main(int argc, char** argv) 的参数 |
| Standard Input | 模拟键盘输入,供 scanf/cin 读取 |
| Interactive Console | 程序运行中交互式输入 |
如果程序依赖命令行参数,必须填在 Command line arguments 里,否则 argv 内容为空,程序行为会和预期不同。
常见错误:Runtime Exceed
出现 Runtime Exceed(运行超时)时,页面会给出几个可能原因:
- 程序从标准输入读取数据,但你没有在 stdin 提供输入
- 程序包含死循环,永远不退出
- 程序包含无限递归调用
- 程序处理的数据量过大,耗时过长
排查顺序建议是:先确认 Standard Input 是否填了必要输入;再检查循环的终止条件;然后检查递归是否有正确的基准情形。这三类原因覆盖了大多数超时情况。
保存、分享与下载
编辑器提供以下操作:
- Save:保存当前代码
- Share:生成可分享的链接
- Download all files:下载项目文件
- Beautify:格式化代码
如果需要调整编译行为,可以在 Extra Compiler Flags 里添加额外编译参数。编辑器还支持切换主题(Dark/Light)、编辑模式(Normal/Emacs/vim)、字体大小、Tab 空格数、自动补全和自动换行。
什么时候适合用 OnlineGDB
适合:临时验证一段 C/C++ 代码、在没有本地环境的机器上调试、需要把可运行代码分享给别人。
不太适合:项目依赖多个本地库、需要复杂构建系统、代码涉及敏感数据。这类情况更适合本地工具链。