[Linux] GDB使用指南----包含CentOS7下安装以及使用

什么是GDB?

GDB 是由 GUN 软件系统社区提供的调试工具,同 GCC 配套组成了一套完整的开发环境,GDB 是 Linux 和许多 类Unix系统的标准开发环境。可以用来调试C、C++、Go、java、 objective-c、PHP等语言。

GDB的作用

  • 程序启动时,可以按照自定义的要求运行程序,例如设置参数和环境变量;
  • 可以让被调试的程序在所指定的代码处暂停运行,并查看当前运行状态 (例如当前变量的值,函数的执行结果),即支持断点调试;
  • 当程序被停住时,可以检查当前程序的中的变量的状态;
  • 在程序执行过程中,可以改变某个变量的值,还可以改变代码的执行顺序,从而尝试修改程序中出现的逻辑错误。

安装GDB(CentOS7)

  • 查看是否安装
rpm -qa | grep gdb

在这里插入图片描述
说明已经安装了。

  • 如果没有安装,使用以下命令:
sudo yum install -y gdb

如何生成有调试信息的程序

Linux gcc/g++出来的二进制程序,默认是release(发布版本)模式,在编译命里里面加 -g 的选项,在进行make即可生带DeBug( 调试版本 )版本的可执行程序。
一般会在系统出现错误时,利用core文件来进行调试,有关于如何生成code文件以及一些相关的问题,请看我的另一篇文章linux系统下产生Segmentation fault 与 Segmentation fault (core dumped)!!!

https://blog.csdn.net/m0_73537205/article/details/138519485?spm=1001.2014.3001.5501

使用GDB

先来介绍一些调试代码

  • l(list) 行号/函数名 —— 显示对应的code,每次10行,也可以通过l xx xx 来查看xx-xx行的源码。 在这里插入图片描述

*r(run)【无断点直接运行、有断点从第一个断点处开始运行】

  • b(breakpoint) + 行号 —— 在那一行打断点
    在这里插入图片描述

  • b 源文件:函数名 —— 在该函数的第一行打上断点

  • b 源文件:行号 —— 在该源文件中的这行加上一个断点

  • info b—— 查看断点的信息
    在这里插入图片描述
    其中:
    Num —— 编号
    Type —— 类型
    Disp —— 状态
    Enb —— 是否可用
    Address —— 地址
    What —— 在此文件的哪个函数的第几行

  • d(delete) + 当前要删除断点的编号 —— 删除一个断点

  • d + breakpoints —— 删除所有的断点

  • disable b(breakpoints) —— 使所有断点无效

  • enable b(breakpoints)—— 使所有断点有效

  • disable b(breakpoint) + 编号 —— 使一个断点无效

  • enable b(breakpoint) + 编号 —— 使一个断点有效

  • enable breakpount —— 使一个断点有效

  • n(next) —— 逐过程

  • s(step) —— 逐语句

  • bt —— 看到底层函数调用的过程

  • set var—— 修改变量的值

  • p(print) 变量名 —— 打印变量值

  • display —— 跟踪查看一个变量,每次停下来都显示它的值

  • undisplay + 变量名编号 —— 取消对先前设置的那些变量的跟踪

  • until + 行号 —— 进行指定位置跳转,执行完区间代码

  • finish—— 在一个函数内部,执行到当前函数返回,然后停下来等待命令

  • c(continue) —— 从一个断点处,直接运行至下一个断点处

  • quit退出gdb

参考:
【Linux】GDB保姆级调试指南(什么是GDB?GDB如何使用?)

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

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

相关文章

73. 矩阵置零/54. 螺旋矩阵

73. 矩阵置零 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1: 输入:matrix [[1,1,1],[1,0,1],[1,1,1]] 输出:[[1,0,1],[0,0,0],[1,0,1]] 思路&#x…

小程序搜索排名优化 三步操作提升

搜索排名优化最直接的一个目的就是为了提升小程序的排名和流量,获取用户的信任度。当用户在搜索关键词的时候,能让用户看到小程序,增加被发现和点击的机会。 一、关键词优化: 1.选择合适的关键词:选择与小程序内容高…

Python和MATLAB及C++资产价格看涨看跌对冲模型和微积分

🎯要点 🎯资产价格动态数学随机模型:🖊价格几何布朗运动过程积分 | 🖊布朗运动和几何布朗运动随时间概率密度 | 🖊几何布朗运动离散过程 | 🖊电动车历史股票价值及预期。🎯金融衍生…

代码训练LeetCode(17)存在重复元素

代码训练(17)LeetCode之存在重复元素 Author: Once Day Date: 2024年5月7日 漫漫长路,才刚刚开始… 全系列文章可参考专栏: 十年代码训练_Once-Day的博客-CSDN博客 参考文章: 219. 存在重复元素 II - 力扣(LeetCode)力扣 (LeetCode) 全球…

fero - yolo - mamba:基于选择性状态空间的面部表情检测与分类

fero - yolo - mamba:基于选择性状态空间的面部表情检测与分类 摘要IntroductionRelated work FER-YOLO-Mamba: Facial Expression Detection and Classification Based on Selective State Space 摘要 面部表情识别(FER)在理解人类情绪线索方面起着关键…

零资源跑大模型:Hugging Face API + LiteLLM + Flask

前言 HuggingFace 是自然语言处理领域的开源软件库和平台,其收纳了众多最前沿的模型和数据集,并提供了 Serverless Inference API,用户可以轻松调用这些模型,甚至用于运行自己的私人模型。本教程将指导用户如何利用 Hugging Face…

RabbitMQ之消费者并发消费

为什么要引入消费者的并发消费? 当生产者的推送速度是远远超过消费者的能力的,可以提高消费者的消费速度。比如在java中我们可以启动多个 JVM 进程,实现多进程的并发消费,从而加速消费的速度,在mq中也可以通过设置配置…

如何使用Python创建服务器向Android设备发送GCM推送通知

简介 推送通知可以让您的 Android 应用在用户不使用应用时通知用户发生的事件。本教程的目标是向您的应用发送一个简单的推送通知。我们将在服务器上使用 Ubuntu 14.04 和 Python 2.7,以及 Google Cloud Messaging 作为推送通知服务。 我们将使用术语 服务器 来指…

leetcode83-Remove Duplicates from Sorted List

题目 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 示例 1: 输入:head [1,1,2] 输出:[1,2] 示例 2: 输入:head [1,1,2,3,3] 输出&…

鸿蒙内核源码分析(进程通讯篇) | 九种进程间通讯方式速揽

进程间为何要通讯 ? 鸿蒙内核默认支持 64个进程和128个任务,由进程池和任务池统一管理.内核设计尽量不去打扰它们,让各自过好各自的日子, 但大家毕竟在一口锅里吃饭, 不可能不与外界联系, 联系就得有渠道&#xff0c…

MySQL VARCHAR 最佳长度评估实践

你的 VARCHAR 长度合适么? 作者:官永强,爱可生 DBA 团队成员,擅长 MySQL 运维方面的技能。热爱学习新知识,亦是个爱打游戏的宅男。 作者:李富强,爱可生 DBA 团队成员,熟悉 MySQL&…

Go微服务精讲:Go-Zero全流程实战即时通讯(超清)

go-zero 是一个集成了各种工程实践的 web 和 rpc 框架。通过弹性设计保障了大并发服务端的稳定性,经受了充分的实战检验。 Go微服务精讲:Go-Zero全流程实战即时通讯(超清) go-zero 中的 api,rpc,数据库等涉及的代码,…

C#标签设计打印软件开发

1、新建自定义C#控件项目Custom using System; using System.Collections.Generic; using System.Text;namespace CustomControls {public class CommonSettings{/// <summary>/// 把像素换算成毫米/// </summary>/// <param name"Pixel">多少像素…

Springboot 集成 Consul 实现服务注册中心-05

因为后续很多模块都要用到注册中心&#xff0c;所以此处先实现此模块。 Consul简介 Consul是一个开源的服务发现和配置管理工具&#xff0c;具有跨平台、运行高效等特点。它由HashiCorp公司开发&#xff0c;并使用Go语言编写。Consul主要用于实现分布式系统中的服务发现、健康…

解决Node.js mysql客户端不支持认证协议引发的“ER_NOT_SUPPORTED_AUTH_MODE”问题

这是一个版本问题 我用koa2和mysql2链接就没有问题 不知道这个老项目运行为啥有这个问题 解决方案 打开mysql运行这个两个命令&#xff1a; ALTER USER rootlocalhost IDENTIFIED WITH mysql_native_password BY 123321; FLUSH PRIVILEGES; 须知(给小白看的&#xff01;) …

搜维尔科技:Senseglove Nova 数据手套触觉反馈测试

Senseglove Nova 数据手套触觉反馈测试 搜维尔科技&#xff1a;Senseglove Nova 数据手套触觉反馈测试

PCB板上的Mark点

PCB生产中Mark点设计 1.pcb必须在板长边对角线上有一对应整板定位的Mark点,板上集成电路引脚中心距小于0.65mm的芯片需在集成电路长边对角线上有一对对应芯片定位的Mark点;pcb双面都有贴片件时,则pcb的两面都按此条加Mark点。 2.pcb边需留5mm工艺边(机器夹持PCB最小间距要求…

优立科技:从数字孪生到元宇宙

2021年10月&#xff0c;Facebook致力于发展元宇宙&#xff0c;并更名为Meta。加上此前Roblox上市的消息&#xff0c;让「元宇宙」一词迅速在2021年爆火&#xff0c;刺激了VR、游戏等相关产业的发展&#xff0c;甚至有人宣称2021年为「元宇宙『元年』」。然而&#xff0c;「元年…

YOLOv8的训练、验证、预测及导出[目标检测实践篇]

这一部分内容主要介绍如何使用YOLOv8训练自己的数据集&#xff0c;并进行验证、预测及导出&#xff0c;采用代码和指令的两种方式&#xff0c;参考自官方文档&#xff1a;Detect - Ultralytics YOLOv8 Docs。实践篇不需要关注原理&#xff0c;只需要把流程跑通就行&#xff0c;…

信号产生的五种方式

文章目录 正文前的知识准备kill 命令查看信号man手册查看信号信号的处理方法 认识信号产生的5种方式1. 工具2. 键盘3. 系统调用kill 向任意进程发送任意信号raise 给调用方发送任意信号abort 给调用方发送SIGABRT信号 4. 软件条件5. 异常 正文前的知识准备 kill 命令查看信号 …