一个支持在线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 函数停下来后,退出调试。

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

相关推荐
dingdingfish21 小时前
Bash学习 - 第6章:Bash Features,第10节:The Restricted Shell
bash·shell·rbash·restrict
dingdingfish2 天前
Bash学习 - 第6章:Bash Features,第7节:Arrays
bash·shell·array·index·associate
wsad05322 天前
Linux Shell脚本执行方式全解析:source、点号、路径、bash与exec的区别
linux·运维·bash·shell
dingdingfish4 天前
Bash学习 - 第6章:Bash Features,第3节:Interactive Shells
bash·shell·interactive
追夢秋陽4 天前
MacOS app打包Dmg线下分发测试及公证shell脚本
macos·shell·dmg·cocoa打包·打包脚本
袁袁袁袁满4 天前
Linux怎么创建Shell脚本.sh文件
linux·运维·服务器·shell·shell脚本.sh文件·创建shell脚本·创建.sh文件
之歆5 天前
Shell 命令与基础完全指南
shell
源文雨9 天前
shell调用ffmpeg递归转换所有wav至flac的脚本
ffmpeg·bash·音视频·音频·unix·shell·音频编码
Sheep Shaun10 天前
如何让一个进程诞生、工作、终止并等待回收?——探索Linux进程控制与Shell的诞生
linux·服务器·数据结构·c++·算法·shell·进程控制