【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

【实用教程】python 批量解析 EML 邮件文件 存成txt ,可以利用 AI 辅助快速生成年终总结

【实用教程】批量解析EML邮件文件,AI辅助快速生成年终总结 在年底撰写工作总结时,邮件记录是最真实的工作轨迹凭证。手动整理数十上百封邮件不仅耗时,还容易遗漏关键信息。本文将分享一个Python脚本,可批量解析EML格式邮件,自动汇总发件人、收件人、主题、正文等核心信息,生成结构化的文本报告,直接投喂AI即可快速生成高质量年终总结。 一、教程核心价值 1. 解放双手:批量处理任意数量EML文件,无需手动打开每封邮件 2. 结构化汇总:自动提取邮件关键信息,按统一格式整理 3. AI友好:生成的纯文本报告可直接作为AI提示词,快速生成年终总结 4. 编码兼容:完美解决中文邮件、中文路径乱码问题 二、环境准备 1. 安装Python 确保本地安装Python 3.7及以上版本(推荐3.9+),可从Python官网下载安装。 2. 安装依赖库 打开命令提示符(CMD)或终端,执行以下命令安装所需依赖: pip

By Ne0inhk

Python自动化PPT神器:python-pptx 库从入门到实战(附5个实用案例)

在日常工作中,你是否经常需要制作重复性的PPT?比如每月的业务报告、批量生成产品介绍、学生成绩单展示等。手动调整格式、输入数据不仅耗时,还容易出错。而 python-pptx 库的出现,让PPT制作进入了"代码驱动"时代——用几行代码就能自动生成结构规整、格式统一的PPT,大幅提升效率。 本文将从基础用法到实战场景,全方位讲解 python-pptx 的使用方法,让你彻底告别手动制作PPT的繁琐。 一、什么是 python-pptx?为什么需要它? python-pptx 是一个用于创建和修改 Microsoft PowerPoint(.pptx)文件的Python库,它的核心优势在于: * 自动化生成:通过代码批量创建幻灯片,避免重复劳动,尤其适合定期报告、批量文档等场景。 * 格式精准控制:精确设置字体、颜色、布局、位置等,确保PPT风格统一,比手动调整更规范。 * 数据联动:直接从Excel、数据库等数据源读取内容,

By Ne0inhk
C++ 多态详解:从概念本质、语法规则到底层实现,结合实战代码的全方位指南

C++ 多态详解:从概念本质、语法规则到底层实现,结合实战代码的全方位指南

🔥草莓熊Lotso:个人主页 ❄️个人专栏: 《C++知识分享》《Linux 入门到实践:零基础也能懂》 ✨生活是默默的坚持,毅力是永久的享受! 🎬 博主简介: 文章目录 * 前言: * 一. 多态的概念:从“多种形态说起” * 1.1 多态的概念解析 * 1.2 生活中的多态示例 * 二. 多态的构成条件和核心语法 * 2.1 条件 1:虚函数的定义 * 2.2 条件 2:虚函数的重写(覆盖) * 2.3 多态场景的一个笔试选择题(重要): * 三、虚函数重写的特殊情况 * 3.1 协变(了解) * 3.2 析构函数的重写(重点)

By Ne0inhk

Python 虚拟环境管理工具 UV:从安装到高级用法的详细教程

前言 在 Python 开发中,管理不同项目的依赖包和 Python 版本是开发者常常遇到的问题。不同项目可能依赖不同版本的库,甚至同一个库在不同版本下的行为可能不同。为了避免这些问题,使用虚拟环境成为了解决方案。虚拟环境通过隔离每个项目的依赖,避免了版本冲突问题。 在 Python 中,常用的虚拟环境管理工具有 virtualenv、venv 和一些第三方工具,如 UV。本文将详细介绍如何使用 UV 虚拟环境管理工具,从安装、创建虚拟环境、管理 Python 版本和依赖包,到切换和删除虚拟环境。 一、什么是 UV? UV 是一个简洁、轻量级的 Python 虚拟环境管理工具。它与传统的虚拟环境管理工具(如 virtualenv 或 venv)相比,提供了更加简单和清晰的命令行界面,使得开发者可以高效管理 Python 环境。UV

By Ne0inhk