Linux下的的GDB调试技巧一 —— 基础知识和介绍

news2024/11/24 1:43:14

基础知识

  • BUG

BUG是一个英文单词,本意是指昆虫、小虫、损坏、犯贫、缺陷、窃听器等意思。在本文中是计算机领域专业术语,一般是指在电脑系统或程序中,隐藏着的一些未被发现的缺陷或问题,简称程序漏洞。另外bug还有一种引申意义,是用来形容某事物厉害的超乎想象。

正所谓编程不息,Bug 不止,发现第一个 Bug 的人,正好也是引发众所周知的史上最大 Bug“千年虫”的人,这个人便是 COBOL 语言的发明者,传奇女军官兼女程序员格蕾丝·赫柏(Grace Hopper)。

 

  • DEBUG

DE是去除分离的意思,Debug是计算机排除故障的意思。有一天,上边那位传奇女军官兼女程序员格蕾丝·赫柏准将在调试设备时出现故障,拆开继电器后,发现有只飞蛾被夹扁在触点中间,从而“卡”住了机器的运行。于是,霍珀诙谐地把程序故障统称为“BUG”,把排除程序故障叫DEBUG,而这奇怪的“称呼”,竟成为后来计算机领域的专业行话。

发现问题的根源(定位BUG)比想出解决方案(解决BUG)更加重要。

  • Debugger

Debugger中文译为调试器。调试器是用来调试软件的工具,是开发人员的得力助手。调试器的种类有很多,例如windows系统的Visual Studio、Linux系统的gdb、还有跨平台使用的Vscode。

工欲善其事,必先利其器。要想快速发现BUG、解决BUG,必须要掌握使用这些调试

器的基本方法和技巧。

GDB介绍

GDB全称是GNU Debugger,是UNIX及UNIX-like下的强大调试工具,可以调试ada、c、c++、asm、minimal、d、fortran、objective-c、Golang、java、pascal等语言。或许,你比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但在UNIX平台下做软件,你会发现GDB这个调试工具相比于VC、z的优点是具有修复网络断点以及恢复链接等功能,比BCB的图形化调试器有更强大的功能。

一般来说,GDB可以做四种主要的事情(以及支持这些事情的其它事情)来帮助你捕获行为中的 错误:

(1)启动你的程序,并指定可能影响其行为的所有内容,即可以按照你的自定义的要求随心所欲地运行程序。

(2)可让被调试的程序在你所指定的调置的断点处停住。断点可以是条件表达式,也就是说使程序在指定条件下停止。

(3)当程序被停住时,可以检查此时你的程序中所发生的情况。

(4)更改程序中的内容,以便你可以尝试纠正一个错误的影响,然后继续学习另一个错误。

注意:这些程序可能与GDB(本机)在同一台计算机上执行,在另一台计算机(远程)上或在模拟器上执行。GDB可以在大多数流行的UNIX和Microsoft Windows变体以及Mac OS X上运行。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/21031.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL表的增删改查操作(CRUD)

1. 新增1.1 插入一行全列插入1.2 插入多行指定列插入2. 查询2.1 全列查询2.2 指定列查询2.3 查询字段为表达式2.4 起个别名 as2.5 去重 distinct2.6 排序 order by2.7 条件查询 where2.8 分页查询 limit3. 修改 update4. 删除 delete增删查改(CRUD)即:增加(Create)、查询(Retri…

STC51单片机34——五线四相步进电机驱动(1个步进电机)

/*-------------------------------------------------------------------------------- MCU: STC15W408AS 注意其没有T1,但是有T2 开发板: STC15W408AS最小系统板 晶振: 内部时钟11.0592M,波特率3…

JavaScript面向对象:面向过程与面向对象

面向对象编程介绍 两大编程思想 面向过程 面向对象 面向过程编程 POP(Process-oriented programming) 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候再一个一个的依次调用就可以了。 举个栗子:…

STM32 CRC计算单元(循环冗余校验)

STM32第三篇【1】STM32 CRC计算单元【2】STM32 CRC简介【3】STM32 CRC主要特性【4】STM32 CRC功能描述【5】STM32 CRC寄存器【6】STM32 数据寄存器(CRC_DR)【7】STM32 独立数据寄存器(CRC_IDR)【8】STM32 控制寄存器(C…

数字化转型模块设计

基于了解到现状及问题,设计部门提出如下的业务需求: 创建三维通用模型仓库: 在Windchill创建相应的存储库及文件夹,分别存储不同类型的通用模型,例如标准件、通用件、外购件等等;对于存储库及文件夹针对所…

k8s 资源管理

文章目录1. 资源管理介绍2. 资源管理方式2.1 命令式对象管理Kubectl 命令资源对象类型子命令输出格式namespace / pod的创建和删除演示2.2 命令式对象配置2.3 声明式对象配置3. kubectl 可以在 node 节点上运行吗?4. 使用推荐:三种方式应该怎么用&#x…

【王道计算机网络笔记】计算机网络体系结构-计算机网络体系结构与参考模型

文章目录计算机网络分层结构OSI参考模型TCP/IP参考模型5层参考模型5层参考模型的数据封装与解封装计算机网络分层结构 我们把计算机网络的各层及其协议的集合称为网络的体系结构(Architecture)。换言之,计算机网络的体系结构就是这个计算机网络及其所应完成的功能的…

Hash表实现原理

Hash表查找的本质就是:在创建记录表的时候,确定记录的key与其存储地址之间的关系f,当要查找keyk的记录时,通过关系 f 就可得到相应记录的地址而获取记录,从而免去了key的比较过程 我们把这个关系 f 称为Hash 函数&…

1.3 字符编码

文章目录1. 编码2. ASCII 字符集3. 字符编码发展4. Unicode 字符集5. 字符编码5.1 UTF-165.3 UTF-325.3 UTF-86. 文件编码转换7. 乱码问题1. 编码 计算机只能识别高低电平, 将高低电平用数字表示: 0表示低电压, 1表示高电平. 于是就创造出来二进制数, 一个二进制有 0 和 1, 两…

【网络工程】5、路由器介绍及配置实操

接上篇《4、企业级交换机配置》 之前我们通过eNSP完成了一个企业级交换机的配置实例,本篇我们继续来讲解网络设备——路由器的介绍,以及完成路由器的相关配置实操。 当我们申请了一条宽带后,一般都需要一台路由器来进行上网,那么…

SpringBoot项目创建及其核心设计思想

参考了很多相关博客: springboot怎么学? - 知乎 如何解读springboot 中约定大于配置、JPA是什么、咋用_打豆豆。的博客-CSDN博客 SpringBoot约定大于配置到底是什么意思?_zhupanlinch的博客-CSDN博客 SpringBoot约定大于配置的特性解读 & SpringBoot…

胶囊网络深入理解

胶囊网络的概念与理解 胶囊网络概述 人工神经元不应当追求神经元活动中的视角不变性,(使用单一的标量输出来总结一个局部池中的重要特征的检测器的活动)。而应当使用局部的胶囊,这些胶囊对其输入执行一些相当复杂的内部计算。然…

【Java】Java中时间的相关类(Date,SimpleDateFormat)

文章目录Date类SimpleDateFormat类Date类 Date是JDK提供的类,用来描述时间,使用无参构造创建的对象默认表示系统的当前时间,使用有参构造(指定的毫秒值)表示从时间原点(1970年)过了该参数值的时…

08_原始套接字

知识点1【原始套接字概述】 1、UDP封包格式 ​IP封包格式: Ethernet封包格式 TCP封包格式: ICMP封包格式:ping 知识点2【数据包的分析】 案例:网络分析器: 知识点2【混杂模式】接受数据(了解&#x…

win11+WSL2安装visdom

win11WSL2安装visdom环境配置下载visdom小小的修改运行visdom环境配置 Win11WSL2Ubuntu-18.04 下载visdom pip install visdom pip install --upgrade visdom conda install -c conda-forge visdom 小小的修改 \home\grass\miniconda3\envs\torch\lib\python3.8\site-pack…

[一篇读懂]C语言九讲:线性表应用

[一篇读懂]C语言九讲:线性表应用1. 与408关联解析及本节内容介绍1 与408关联解析2 本节内容介绍2. 线性表的顺序表示原理解析1 线性表线性表的定义线性表的特点2 线性表的顺序表示顺序表的定义顺序表优缺点顺序表插入操作顺序表删除操作动态分配3. 顺序表的初始化及…

微服务系列之单体架构

随笔 终于迎来了“微服务、云原生”系列文章,这个系列的文章的更新速度博主无法保证能够每个星期一篇,因为这个系列的难度比以往系列都要高(以往的系列就没有保证一个星期一更)。但是长时间不去写文章,自己可能会慢慢…

Keepalived+LVS部署

目录 一、环境准备 二、实验拓扑 三、部署LVS DR环境 四、LVS服务器配置keepalived 1、安装keepalived 2、修改lvs1服务器keepalived配置 3、修改lvs2服务器keepalived配置 五、客户端测试 1、负责均衡测试 2、LVS服务器高可用测试 一、环境准备 准备4台centos服务器…

学习日记(单元测试、反射、注解、动态代理)

文章目录学习日记(单元测试、反射、注解、动态代理)一、单元测试1. 单元测试实践2. JUnit 常用注解二、反射1. 反射获取类对象2. 反射获取构造器对象3. 反射获取成员变量对象4. 反射获取成员方法对象三、反射的作用举例1. 绕过编译阶段为集合添加数据2. …

基于生物地理学的优化算法(BBO)用于训练多层感知器(MLP)【多种算法进行比较】(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…