【Linux系统】C/C++的调试器gdb/cgdb,从入门到精通

【Linux系统】C/C++的调试器gdb/cgdb,从入门到精通

各位读者大佬好,我是落羽!一个坚持不断学习进步的学生。
如果您觉得我的文章还不错,欢迎多多互三分享交流,一起学习进步!
也欢迎关注我的blog主页:
落羽的落羽

文章目录

一、调试前的预备知识

程序发布的方式有两种,debug模式和release模式。

  • debug模式:生成的可执行程序中会包含程序的调试信息,便于程序员进行调试代码。
  • release模式:会剥离或不生成这些调试信息。这使得文件更小,但也意味着调试器几乎无法工作,release版本程序无法进行调试。

Linux的gcc/g++,按照我们之前的写法gcc -o $@ $^,默认生成的是release版本的程序,是无法进行调试的。要在命令后加-g选项,指定以debug方式发布,debug模式下的程序我们才能进行调试。

gcc -o $@ $^ -g 

二、gdb/cgdb的使用

1. 启动,查看代码

开始使用gdb/cgdb调试,首先要确定系统里已安装gdb/cgdb,其次要调试的程序确定是debug版本的。

gdb 文件名 

gdb和cgdb中,需要用各种指令完成调试过程的不同操作:

  • 退出调试:ctrl + d或输入quit回车

使用gdb,一开始是看不到我们的代码的,要使用l相关命令:

  • 输入(list)l:显示源代码,每次显示10行
  • 输入l 函数名/文件名:列出指定函数/指定文件的代码

输入l 文件名:行号:列出指定文件以某一行为中的几行代码

在这里插入图片描述

但是,实际开发中要靠自己显式出代码,还是很麻烦。因此cgdb诞生了,cgdb是gdb的前端界面增强版本,能够直接将代码显示在屏幕上面,初次之外其他命令操作没有区别:

在这里插入图片描述

后面我们就在cgdb中进行演示了。

2. 基础调试命令

  • 命令(run)r:开始调试,从程序开始执行,调试中途随时可以输入r重头调试
  • 命令(break)b [文件名:]行号:在指定行号设置断点
  • 命令info b:查看当前所有断点的信息
  • 命令d:删除所有断点
  • 命令d 断点序号:删除指定序号的断点

断点会在行号处标明:

在这里插入图片描述

每一个断点都有一个序号,通过info b查看,删除指定断点需要指明这个序号,而不是断点的行号:

在这里插入图片描述
  • 命令(continue)c:从当前位置开始连续执行程序,到下一个断点
  • 命令(next)n:单步逐过程执行,遇到函数时不进入函数内部
  • 命令(step)s:单步逐语句执行,遇到函数时进入函数内部
  • 命令(finish)f:执行到当前函数返回时
  • 命令until 行号:执行到指定行号
gdb/cgdb中,回车自动执行上一条命令

3. 监视变量相关命令

在调试过程中,我们经常需要观察一个变量的值:

  • 命令(print)p 变量/表达式:打印出变量/表达式的值。
  • 命令set var 变量 = 值:修改一个变量的值
  • 命令display 变量:持续显示一个变量的值
  • 命令undisplay 变量序号:取消对指定序号的变量的持续追踪显示
  • 命令watch 变量:监视一个变量的值,如果该变量的值在程序运行期间发生变化,cgdb会暂停程序的执行并通知用户。这一命令常用在,如果有不应该被修改的变量,你怀疑他被修改了,就可以watch他。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4. 设置条件断点

一个断点,也可以为其设置触发的条件。

b 位置 if 条件 #条件满足时,断点才会生效

举个栗子:b 10 if i == 5,表示在第10行新增一个断点,只有 i == 5 时才会生效

在这里插入图片描述

也可以给一个已存在断点新增触发条件:

condition 断点序号 条件 
在这里插入图片描述

非常好理解!

本篇完,感谢阅读

Read more

小型服务器监控太复杂?DashDot+cpolar轻量方案新手也能上手!

小型服务器监控太复杂?DashDot+cpolar轻量方案新手也能上手!

文章目录 * 前言 * 1. 本地环境检查 * 1.1 安装docker * 1.2 下载Dashdot镜像 * 2. 部署DashDot应用 * 3. 本地访问DashDot服务 * 4. 安装cpolar内网穿透 * 5. 固定DashDot公网地址 前言 家里放了台小服务器跑服务,想看看CPU和内存占用,还得SSH登录输命令?太麻烦了!DashDot这款轻量级监控工具帮你搞定,网页版仪表盘直观显示服务器状态,颜值还超高✨。但问题来了,只能在同一网络查看,出门在外想看看服务器是否正常运行都不行?别慌,cpolar内网穿透来帮忙,让你的服务器仪表盘“随身带”,监控从此告别“命令行依赖”! DashDot的核心功能就像给服务器装了“智能后视镜”,CPU、内存、磁盘、网络使用情况实时显示,还有漂亮的动态图表,连风扇转速都能监控到。它特别适合个人开发者和小型服务器用户,尤其是非专业运维的朋友,毕竟部署只要一条Docker命令,连我这种“技术小白”都能搞定。优点嘛,

By Ne0inhk

【GitHub项目推荐--Clawith:开源多智能体协作平台】⭐⭐

简介 Clawith 是一个开源的多智能体协作平台,旨在将AI代理从简单的聊天机器人提升为组织的数字员工。与单智能体工具不同,Clawith为每个AI代理赋予持久的身份、长期记忆和独立的工作空间,让它们能够像团队一样协作,并与人类同事无缝配合。如果说OpenClaw赋能个人,那么Clawith则将其扩展到前沿组织。 Clawith的核心创新在于将AI代理视为真正的组织成员。每个代理都理解完整的组织结构图:知道谁是他们的同事(无论是人类还是其他AI代理),并能够跨越边界进行协作。代理可以发送消息、委派任务、建立真实的工作关系——就像新员工加入团队一样自然。平台通过Agent Plaza(组织内的共享社交空间)实现知识流动,代理在这里发布更新、分享发现、评论彼此的工作,并实时感知团队动态。 平台采用现代化的技术架构:前端基于React 19和TypeScript,后端使用FastAPI,支持SQLite/PostgreSQL数据库和Redis缓存。Clawith本身不运行任何AI模型,所有LLM推理都通过外部API提供商(如OpenAI、Anthropic、Azure等)处理,本地部

By Ne0inhk

Git BASH安装教程

什么是 Git Bash? 简单来说,Git Bash 是为 Windows 系统提供的模拟 Linux 风格的 Bash 命令行环境,主要用于运行 Git 命令。Bash 是 Linux 和 macOS 用户常用的命令行工具,而 Windows 自带的命令提示符与它不兼容。因此,Git for Windows 软件包中包含了 Git Bash,让你可以在 Windows 上使用熟悉的 Bash 语法来操作 Git 和进行文件管理 第一步:下载 Git for Windows Git Bash 是 Git for Windows

By Ne0inhk