如何用在线调试器(OnlineGDB)编译、运行和调试 C/C++ 代码
OnlineGDB 是一个在浏览器里运行的 C/C++ 在线编译器和调试器,编译用 gcc/g++,调试用 gdb。你不需要在本地安装任何工具,打开网页就能写代码、编译运行、打断点单步调试。它适合快速验证一段 C/C++ 代码、排查逻辑错误,或者在没有本地开发环境的机器上临时调试。前提是你能访问该网站,并且代码本身是 C 或 C++(该站点当前支持的语言以页面语言下拉列表为准,C/C++ 是核心支持项)。
第一步:选择语言并写入代码
打开 OnlineGDB 后,先确认语言设置:
- 在语言下拉框中选择 C 或 C++。C++ 还细分了 C++ 14、C++ 17、C++ 20、C++ 23、C++ 26 等标准版本,按你的代码需要选择;如果代码用了较新的语法特性,选对应或更高的标准。
- 在中间编辑器区域直接输入或粘贴代码。页面默认给出一段 Hello World 示例,可以直接覆盖。
- 编辑器下方可以调整主题(Dark/Light)、编辑模式(Normal/Emacs/vim)、字号、Tab 空格数、自动补全和自动换行。这些只影响编辑体验,不影响编译结果。
- 如果有额外的编译参数需求,可以在 Extra Compiler Flags 里填写。
第二步:先 Run 编译运行
在进入调试之前,建议先点 Run 确认程序能正常编译和运行:
- 点击顶部 Run 按钮,程序开始编译。
- 编译信息、程序输出会显示在下方终端区域。编译报错会出现在 stderr 或编译输出里,按提示回到代码修改。
- 如果程序需要从标准输入读数据,在 Standard Input 区域提前填好输入内容。这一步很关键——很多“运行没反应”或“Runtime Exceed”就是因为忘了提供 stdin 输入。
- 需要传命令行参数时,填在 Command line arguments 里。
Run 通过后,说明代码至少语法正确、能跑起来。接下来才是用调试器定位逻辑问题。
第三步:点 Debug 进入调试模式
点击 Debug 按钮,程序会以调试模式启动。页面下方会出现调试控制区,包含这些操作:
| 操作 | 作用 |
|---|---|
| start / pause / continue | 开始、暂停、继续执行 |
| step over | 单步执行,遇到函数调用不进入函数内部 |
| step into | 单步执行,遇到函数调用进入函数内部 |
| step out | 从当前函数跳出,回到调用它的上一层 |
| help | 查看调试相关帮助 |
调试前先在代码行号处设置断点。程序运行到断点会停下来,此时你可以检查当前状态。如果终端提示 “Program is not being debugged. Click 'Debug' button to start program in debug mode.”,说明你还没进入调试模式,点 Debug 即可。
第四步:用面板查看运行时状态
程序在断点处停下后,右侧和下方的面板会显示关键信息:
- Call Stack:当前函数调用栈,显示每个栈帧对应的函数、文件和行号。递归或嵌套调用出错时,这里能看清调用路径。
- Local Variables:当前作用域内局部变量的值。单步执行时观察变量怎么变化,是找逻辑错误最直接的方式。
- Display Expressions:可以自己添加表达式,持续观察它的值,比如某个计算结果或指针指向的内容。
- Registers:寄存器值,一般在分析底层行为时才需要看。
- Breakpoints and Watchpoints:管理已设置的断点和观察点。
典型用法:在怀疑出错的位置前打断点,Debug 运行到断点,用 step over/into 逐步执行,同时盯着 Local Variables 里相关变量的值,看它是否在某一刻变成了非预期值。
遇到 Runtime Exceed 怎么排查
页面给出的 Runtime Exceed(运行超时)常见原因有三类:
- 程序在读标准输入,但你没提供输入。检查 Standard Input 区域是否填了数据。
- 死循环。循环条件可能永远为真,用断点加单步确认循环是否按预期退出。
- 无限递归。递归函数缺少正确的终止条件,用 Call Stack 看调用栈是否在不断加深。
另外,如果程序处理的数据量很大、本身耗时较长,也可能触发超时,这种情况需要优化算法或减少数据规模。
保存与分享
- Share:生成可分享的链接,方便把代码发给别人。
- Save:保存当前代码。
- Download all files:把项目里的全部文件下载到本地。
- 页面还有 My Projects、Classroom 等入口,以及 Sign Up / Login 账号功能,登录后可以管理自己的项目。
什么时候适合用它
OnlineGDB 适合:快速验证 C/C++ 片段、练习调试技巧、在没有本地环境时临时排查问题、把可运行代码分享给别人。它不适合:需要复杂构建系统、依赖大量第三方库、或对运行时长和资源有较高要求的项目——这类场景还是本地开发环境更合适。