【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

WorkBuddy 使用指南:从零开始配置 QQ 机器人,解锁桌面智能体新玩法

WorkBuddy 使用指南:从零开始配置 QQ 机器人,解锁桌面智能体新玩法

文章目录 * 前言 * 下载 WorkBuddy * 认识 WorkBuddy * 插件类型 * 配置 QQ 机器人 * 登录 QQ 开放平台并注册激活账号 * 配置超级管理员、主体及认证信息 * 创建 QQ 机器人 * 获取 AppID 和 AppSecret * 从 Claw 中获取 Webhook * 在 QQ 开发平台配置回调地址 * 开始使用 WorkBuddy Claw * 总结 前言 在大家还在沉迷于如何搭建 OpenClaw 的时候,腾讯竟然悄悄公测了 WorkBuddy。这是一款面向全角色的桌面智能体,下达指令即可自动生成文档、表格、图表及 PPT 等可视化成果,能够自主规划并交付多模态复杂任务结果,支持多 Agents 并行工作,极致提效,

By Ne0inhk
Rokid 手势识别技术深度解析:解锁 AR 无接触交互的核心秘密

Rokid 手势识别技术深度解析:解锁 AR 无接触交互的核心秘密

引言 在聊手势识别前,咱们先搞清楚:Rokid是谁?它为啥能把AR手势做得这么自然? Rokid是国内AR(增强现实)领域的“老兵”了,从2014年成立就盯着一个目标——让AR走进日常。你可能见过它的产品:能戴在脸上的“AR眼镜”Max Pro、能揣在兜里的“AR主机”Station 2、适合专业场景的“Station Pro”,这些设备不是用来“炫技”的,而是想让咱们摆脱手机、手柄的束缚,直接用手“摸”虚拟东西。 而手势识别,就是Rokid给AR设备装的“最自然的遥控器”——比如调大虚拟屏幕像捏橡皮一样捏合手指,翻页像翻书一样挥手。但不同设备、不同开发需求,需要搭配不同版本的SDK(软件开发工具包),这就像“不同型号的手机要装对应版本的APP”。 一、基础认知:先选对版本,避免开发走弯路 Rokid手势识别技术随SDK版本迭代持续优化,不同版本适配的Unity(开发工具)

By Ne0inhk
AIStarter一键安装ComfyUI黎黎原上咩7.0整合包教程:新手免费部署AI绘画神器

AIStarter一键安装ComfyUI黎黎原上咩7.0整合包教程:新手免费部署AI绘画神器

大家好!我是熊哥粉丝,今天分享ComfyUI黎黎原上咩整合包7.0在AIStarter平台的一键安装全攻略!咩姐(黎老师)的超强整合包已正式上架,解压即用、GPU/CPU切换,内置海量插件和工作流,完美适配Stable Diffusion AI绘画。 核心亮点 * 一键下载安装:市场搜索“comfyui黎黎原上咩”,优先高速/离线下载(782GB模型包),避免网速瓶颈。 * 智能启动:AIStarter自动打开浏览器,无黑框CMD,终端日志实时查看。aihubpro.cn * 模型管理:下载后一键配置到ComfyUI目录,支持插件/工作流导入,更新无需重下。 * 脚本模式:简单模式(咩姐默认)or 专业模式(多启动选项,自定义路径)。 安装步骤(5分钟上手) 1. 下载AIStarter(官网免费),打开市场。 2. 搜索黎黎原上咩7.0,点击添加

By Ne0inhk

越疆机器人TCP通讯之12点标定脚本程序

-- Version: Lua 5.4.4 -- 此线程为主线程,可调用任何指令 --必须先示教P1点位置,运行到P5点后手动暂停将当前位置保存到P2 --P2作为角度旋转标定基准位 --本程序用于越疆Robot和海康Vision master 12点标定      VelL(20)             -- 设置线性速度      AccL(20)             -- 设置线性加速度      SpeedFactor(20)      -- 设置全局速度      MovL(P1)---初始化位置      x=50---X赋值      y=50---Y赋值      r=15---角度赋值 ---------字符串分割----------      function string.split(str,delimiter)      if str==nil or str=='' or

By Ne0inhk