一个支持在线deBug的编辑器/调试器功能详解

onlinegdb是一款提供在线编辑/编译和调试工具,即无需在本地安装任何软件。便使得程序员可以在任何有网络连接的地方(浏览器)进行代码的编写/编译和调试。

  • 在线编译和调试:onlinegdb支持多种编程语言的在线编译和调试,包括C/C++/Java/Python等。程序员可以在线编写代码,并立即进行编译和调试。
  • 丰富的调试功能:onlinegdb提供了丰富的调试功能,如设置断点、单步执行、查看变量值等。
  • 易于使用和协作:onlinegdb的界面友好,易于使用。同时,它还支持将调试会话分享为链接,方便程序员与他人协作和讨论。

今天就给大家详细演示一个多文件组织结构 形式在onlineGDB上进行编辑/编译/运行/调试的过程。

1.编写

左侧边栏可以通过Create New Project 来创建项目,比如我目前的项目名:Project_C00

右上角可以选择语言。

中间绿色run 按钮的左侧有个灰色文件按钮,它可以创建单个源文件/头文件/Makefile文件/*.input文件等等。(项目自带的main.c可以忽略不用:把其中的main()函数注释掉即可)

实际上,大部分人使用onlineGDB可能就是为了运行一个单个的(一个包含main的源文件)、相对简单的程序,此时使用它默认提供的main.c就可以,编写完成后,点击中间绿色run按钮就可以运行了。本文的宗旨是,测试是否能在onlineGDB 上以终端的形式,编译和运行多文件组织结构项目,并进行调试。

2.编译和运行

如果主过程unit_utilities.c 内容比较简单,绿色run 按钮就可以了。正常情况下,浏览器下方黑色窗口里会有输出。

如果想使用Makefile进行编译和运行的话:

<1>先点击绿色run 按钮右侧的Debug按钮

<2>然后在屏幕下方的Debug Console 窗口里

(gdb) shell make clean

(gdb) shell make unit_utilities

即使用 Debug 控制台执行终端指令,因为大部分同学反应OnlineGDB的界面上根本没有提供 ,它的使用指南上提供的shell按钮 ,那么就只能退而求其次,在gdb模式下执行外部shell命令了。

之后就可以像在线下的终端一样,使用:

./unit_utilities 0

./unit_utilities 1

./unit_utilities 2

......

来测试所有在unit_utilites.c里的测试点了

3.调试

很多同学反应,进入调试状态前,无法在代码行号边栏通过点击加载断点。

那么一个可以替代的操作如下:

<1>项目代码完成后,先点击run按钮右侧的debug按钮

<2>进入debuge 状态后,在界面下侧,gdb窗口内,手动通过指令加载断点。

如上图所示,添加断点的指令:break 130 //在unit_utilities.c 代码的130行添加断点

然后通过run 指令或者 next 代替一些界面上的按钮操作(还是需要你比较熟悉gdb 的一些常用指令 )。

跑过几次后,你会发现之前一些不可以点击使用的按钮也都好用了。

屏幕的右侧就是观察变量的窗口。

常见的指令如下

  • (gdb) file ./a.out # 加载程序
  • (gdb) break 130 # 设置断点
  • (gdb) run # 运行
  • (gdb) set args 5 # 给 main(int argc, char *argv\[\]) 传参

4.几个小疑问

  • 为什么之前点不了断点?

在线调试器(比如你用的 GDB Online)通常依赖一个后台服务来"监听"你的点击。如果这个服务还没有完全初始化,或者页面刚加载完时某些组件还没准备好,你点击行号,它可能根本没反应。这种情况在刚打开页面时尤其容易发生。

  • 为什么用了 shell make 之后就好了?

你通过 Debug Console 输入 shell make,这个过程其实做了两件很重要的事:

激活了调试环境:你的操作让 GDB 真正"跑起来"了,它需要加载程序、解析符号,这个过程会强制唤醒整个调试后端服务。

刷新了前端状态:GDB 在运行后,会向网页前端(就是你看到的界面)发送很多状态信息,告诉它"我准备好了,程序在哪,哪些行可以设置断点"。网页收到这些信息后,行号边栏的点击功能就变得"可用"了。

简单来说,调试环境需要被"激活"一次,前端界面才能真正工作。你通过命令行让 GDB 跑了一遍,等于是帮界面完成了这个"激活"过程。退出后,界面组件已经处于可用状态,所以再点击就没问题了。

  • 以后遇到这种情况怎么办?

下次如果再遇到刚打开页面点不了断点的情况,可以试试这个顺序:

不用急着点断点。

直接 点击 "Debug" 按钮(或者像你一样,在 Debug Console 里随便执行一个 GDB 命令,比如 file ./a.out 或 break main)。

等程序在 main 函数停下来后,退出调试。

这时候再去点击行号,应该就可以正常设置断点了。

相关推荐
Lsetea6 天前
OpenSSL s_client退出码为0却证书验证失败:严格校验与Shell管道排查
https·shell·ssl证书·openssl·tls
fox_charon8 天前
Windows 下 CLI 参数的引号陷阱:为什么 --resume 'uuid' 会失败
windows·shell·cmd·cli·引号
吴声子夜歌17 天前
Shell编程实例——编写安全的shell脚本(二)
linux·运维·shell
吴声子夜歌18 天前
Shell编程实例——内务及管理任务(一)
linux·运维·shell
吴声子夜歌18 天前
Shell编程实例——高级脚本编程(一)
linux·运维·网络·shell
吴声子夜歌19 天前
Shell编程实例——bash的配置与自定义(二)
linux·运维·shell
吴声子夜歌19 天前
Shell编程实例——与解析相关的任务(二)
linux·运维·shell
吴声子夜歌19 天前
Shell编程实例——脚本编程的附加特性
linux·运维·shell
云计算练习生20 天前
什么是内核?操作系统内核到底管哪些事
linux·windows·操作系统·内核·shell
吴声子夜歌22 天前
Shell编程实例——bash入门
linux·运维·shell