如何用 OnlineGDB 在线编译、运行和调试 C/C++ 代码
OnlineGDB 是一个在线编译器与调试器,使用 gcc/g++ 编译、gdb 调试,目前支持 C 和 C++。它适合临时验证一段 C/C++ 代码、排查逻辑错误,或在没有本地编译环境的设备上完成编译、运行、单步调试和分享。整个流程都在浏览器里完成:选语言、写代码、Run 运行、Debug 调试、用 Standard Input 提供输入、用 Share/Save 保存或分享。
打开网站并选择语言与编译器版本
进入 onlinegdb.com,页面顶部就是语言下拉框。C/C++ 相关选项包括:
- C
- C++
- C++ 14
- C++ 17
- C++ 20
- C++ 23
- C++ 26
- C(TurboC)
- C++(TurboC)
选择哪个版本会直接影响可用语法。例如用到 C++17 的结构化绑定、C++20 的 concepts,就要选对应版本,否则编译阶段就会报错。页面同时提供编辑器主题(Dark/Light)、Editor Mode(Normal/Emacs/vim)、字体大小、Tab 宽度、自动补全和自动换行等设置,这些只影响编辑体验,不影响编译结果。
编写代码并点击 Run 编译运行
默认编辑器里已经有一段 Hello World 模板(#include + int main() + printf("Hello World"))。你可以直接改这段代码,也可以清空后粘贴自己的代码。
点击 Run 后:
- 下方 stdout 显示程序的标准输出
- stderr 显示错误输出
- 编译或运行失败时,错误信息会出现在终端区域
如果代码有语法错误,编译不会通过,终端会给出编译器报错;如果编译通过但运行结果不对,就需要进入调试模式定位问题。
点击 Debug 进入调试模式
点击 Debug 按钮,程序会以调试模式启动。页面提示 “Program is not being debugged. Click ‘Debug’ button to start program in debug mode.”,说明调试尚未开始;点击后即可使用调试控制。
调试工具栏提供这些操作:
| 操作 | 作用 |
|---|---|
| start / pause / continue | 启动、暂停、继续执行 |
| step over | 单步执行,不进入被调用函数内部 |
| step into | 单步执行,进入被调用函数内部 |
| step out | 从当前函数跳出,回到调用处 |
| help | 查看调试帮助 |
典型用法:在可疑行设置断点,点击 Debug 让程序停在断点处,再用 step over / step into 逐行观察执行路径,用 continue 跳到下一个断点。
查看运行状态:Call Stack、变量、寄存器与表达式
调试模式下,右侧面板会同步显示程序内部状态:
- Call Stack:显示
# Function File:Line,即当前调用栈和所在文件行号,用来判断程序是怎么走到这一行的 - Local Variables:显示当前作用域内变量的名称和值
- Registers:显示寄存器及其值
- Display Expressions:手动添加想持续观察的表达式,值会随执行更新
- Breakpoints and Watchpoints:列出已设置的断点和观察点,可查看描述并管理
排查数组越界、指针异常、循环变量不对时,通常先看 Local Variables 和 Display Expressions,再结合 Call Stack 确认调用路径。
提供程序输入,避免 Runtime Exceed
如果程序从标准输入读取数据(例如 scanf、cin),必须在运行前提供输入,否则程序会一直等待,最终可能触发 Runtime Exceed。页面提供两个入口:
- Standard Input:把要输入的内容提前填好,程序运行时按顺序读取
- Interactive Console:在程序运行过程中交互式输入
页面列出的 Runtime Exceed 常见原因包括:
- 程序读取标准输入,但没有通过 stdin 提供输入
- 程序包含无限循环,永远不退出
- 程序包含无限递归调用
- 程序处理的数据量过大,耗时过长
前三种可以通过补输入、检查循环条件和递归终止条件解决;第四种需要优化算法或减少数据规模。
保存与分享代码
- Save:保存当前代码
- Share:生成可分享的链接,方便把代码发给别人复现问题
- Download all files:下载项目中的全部文件
- { } Beautify:格式化代码
页面还提供 My Projects、Classroom、Learn Programming、Programming Questions 等入口,以及 Sign Up / Login 用于保存和管理项目。页面存在 Upgrade Premium 链接,说明有付费升级选项,但具体价格和权益需以该页面为准。
常见卡点
- 选错语言或标准版本:C++17 代码在 C++ 选项下可能编译失败,先确认下拉框选的是 C++ 17 或更高。
- 忘记提供输入:程序卡住不动时,先检查是否在等 stdin。
- 断点没生效:确认已点击 Debug 进入调试模式,而不是只点了 Run。
- 调试时看不到变量:变量可能已被优化或不在当前作用域,可结合 Display Expressions 手动观察。
- 页面提示新版本:出现 “New Version Available” 时,先保存数据再刷新页面更新。