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

embedded/2024/12/22 15:20:16/

什么是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.ppmy.cn/embedded/37319.html

相关文章

Mybatis-Plus大批量插入数据到MySQL

MyBatis-Plus的saveBatch方法 GetMapping("/save1") public void save1() {// 数据准备List<MallOrder> orderList getMallOrderList();// mybatis-pluslong start System.currentTimeMillis();mallOrderService.saveBatch(orderList);System.out.println(&…

本地运行AI大模型简单示例

一、引言 大模型LLM英文全称是Large Language Model&#xff0c;是指包含超大规模参数&#xff08;通常在十亿个以上&#xff09;的神经网络模型。2022年11月底&#xff0c;人工智能对话聊天机器人ChatGPT一经推出&#xff0c;人们利用ChatGPT这样的大模型帮助解决很多事情&am…

Found multiple lockfiles

当你遇到“发现多个锁定文件”的提示时&#xff0c;通常意味着你的项目中存在多于一个用来管理依赖关系的文件&#xff0c;而你正在使用的工具&#xff08;比如npm、yarn、pip或其他包管理器&#xff09;不确定应该使用哪一个。锁定文件&#xff0c;比如npm中的package-lock.js…

《Fundamentals of Power Electronics》——示例:Buck-Boost转换器模型变为正则形式

为了说明正则电路模型推导的步骤&#xff0c;让我们将buck-boost转换器的等效电路操作成规范形式。buck-boost转换器的一个小信号交流等效电路如下图所示。 为了将上图所示网络转换成正则形式&#xff0c;需要将所有独立源d(t)转换到左侧&#xff0c;而将所有电感转换到右侧与变…

车载打气泵pcba方案研发

车载打气泵是一种常见的充气工具&#xff0c;它在我们的日常生活中扮演着重要的角色。它主要用于给车辆、自行车、橡皮艇、游泳圈等充气&#xff0c;方便人们在各种场合使用。它简单方便的操作&#xff0c;快速高效的充气速度&#xff0c;以及便携的设计&#xff0c;让我们能够…

微信小程序交互增强:实现上拉加载、下拉刷新与一键返回顶部【代码示例】

微信小程序交互增强&#xff1a;实现上拉加载、下拉刷新与一键返回顶部【代码示例】 基础概念实现步骤与代码示例1. 下拉刷新2. 上拉加载更多3. 返回顶部 性能优化与安全考虑结语与讨论 在微信小程序的开发过程中&#xff0c;提供流畅的用户体验至关重要&#xff0c;其中上拉加…

科技早报 | 微软将推出自研AI大模型;苹果折叠屏iPhone新专利获批 | 最新快讯

微软将推出自研AI大模型 5月6日消息&#xff0c;据The Information报道&#xff0c;微软正在公司内部训练一个新的人工智能模型&#xff0c;规模足以与谷歌、Anthropic&#xff0c;乃至OpenAI 自身的先进大模型相抗衡。 报道称&#xff0c;这个新模型内部代号为“MAI-1”&…

frp内网穿透服务搭建与使用

frp内网穿透服务搭建与使用 1、frp简介 frp 是一个专注于内网穿透的高性能的反向代理应用&#xff0c;支持 TCP、UDP、HTTP、HTTPS 等多种协议。 可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。frp工作原理 服务端运行&#xff0c;监听一个主端口…