【Linux学习】Linux调试器-gdb使用

news2024/10/1 17:16:18

这里写目录标题

    • 🌂背景
    • 🌂gdb使用
    • 🌂指令总结:


🌂背景

程序的发布方式有两种,debug模式 release模式
其中,debug模式是可以被调试的,到那时release模式是不能被调试的;

debug模式和release模式的区别:
debug模式下形成的可执行程序给我们添加了调试信息的,而release模式形成的可执行程序给我们没有调试信息。在两个版本下的大小也不同,大小上,debug版本是大于release版本的。这也是为什么debug可以调试,release不可以调试。release版本通常面向用户和测试,而debug版本通常面向开发。

Linux gcc/g++出来的二进制程序,默认是release模式。所以默认是不能够调试的。

如何gdb以debug模式发布呢?
要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项。

由下图2可以发现,debug版本和release版本所形成的文件的大小有差异。
在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/3d0d77d41e334c098e070156a3f7在这里插入图片描述

怎么看到到底是不是真的添加了呢?

🌂指令readelf
功能:读取可执行程序的格式问题。
可执行程序也有自己的格式,格式为ELF, 您不仅仅是简单翻译为二进制,里面也是有格式的,比如里面是由符号表的,有表头表尾.

使用方法:

# readelf 可执行文件 

在这里插入图片描述
🌂使用readelf查看debug文件

输入指令:

# readelf -S debug版本的可执行程序 | grep -i debug //-i忽略大小写

在这里插入图片描述
根据结果:debug模式下形成的可执行程序给我们添加了调试信息的,而release模式形成的可执行程序给我们没有调试信息。

🌂gdb使用

🌂首先,gdb的安装:

输入指令:

# sudo yum install -y gdb

🌂gdb开始调试:

输入指令:

# gdb 可执行程序

如果想要退出,输入quit。
在这里插入图片描述

🌂指令list(l)

用法 :

(gdb) list    
//可以简写为l,显示可执行文件代码,显示的起始行与上次退出的时候,光标在代码处的位置有关 ,回车往后翻
(gdb) l N     
//显示第N行附近的代码,回车往后翻
(gdb) l 函数名  
//显示该函数附近的代码

在这里插入图片描述

🌂指令run,简写为r,相当于vs下的F5

功能:如果没有打断点的话,直接就运行完了,如果有断点,就会在程序执行的最近断点处停下来。
用法:

(gdb)run/r    //

在这里插入图片描述

🌂指令:b N/函数名等

功能:在第N行/指定位置处 打断点 ,注意:在函数名处打断点,是在函数里面第一行打的断点
用法:

(gdb)d N
(gdb)d 函数名等处

在这里插入图片描述

🌂指令info

功能:查看所有打的断点
用法:

(gdb)info b

在这里插入图片描述

🌂指令d N

功能:删除编号为N的那个断点

(gdb)d N   //删除编号为N的那个断点

在这里插入图片描述

🌂指令:disable/enable N

功能:禁用/打开编号为N的断点
用法:

(gdb)disable N  //禁用断点编号为N的断点(让他不起作用,但是不删除)
(gdb)enable N  //开启断点编号为N的断点(让他起作用)

在这里插入图片描述

🌂指令:n(next)/s(step)

功能:逐语句调试/逐过程 ---- VS中F11/F10
用法:

(gdb)n/s

🌂指令:p 变量名/&变量名

功能:临时(不是一直都有)查看变量的内容/地址
用法:

(gdb)p 变量名
(gdb)p &变量名

![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/040e5440cf73449295b3556e9eb51f55.pn

🌂指令:
diaplay 变量名/&变量名
undisplay 编号

功能:常显示变量的内容/地址
取消对应编号的常显示
用法:

(gdb)display 变量名
(gdb)undisplay  编号

在这里插入图片描述

🌂指令:c(continue)

功能:从一个断点直接到下一个断点(范围查找)
用法:

(gdb)  c

🌂指令:finish

功能:假设在函数体内了,finish直接将函数执行完就停止(范围查找)
用法:

(gdb) finish

🌂指令:bt

功能:查看调用堆栈
用法:

(gdb) bt

在这里插入图片描述

🌂指令:until 行号

功能:在一个范围内,直接运行到指定行(范围查找)
用法:

(gdb) until N   //直接运行到第N行

🌂指令:set var name=value //将变量名为name的变量内容改为value

功能:调试的时候修改一个变量内容的(但是实际代码中不会改变)(不用改代码进行多分枝测试)
用法:

(gdb)set var N=10  //把N改为10

🌂指令总结:

gdb binFile 退出: ctrl + d 或 quit 调试命令:
list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行。
list/l 函数名:列出某个函数的源代码。
r或run:运行程序。
n 或 next:单条执行。
s或step:进入函数调用
break(b) 行号:在某一行设置断点
break 函数名:在某个函数开头设置断点
info break :查看断点信息。
finish:执行到当前函数返回,然后挺下来等待命令
print (p ):打印表达式的值,通过表达式可以修改变量的值或者调用函数
p 变量:打印变量值。
set var:修改变量的值
continue(或c):从当前位置开始连续而非单步执行程序
run(或r):从开始连续而非单步执行程序
delete breakpoints:删除所有断点
delete breakpoints n:删除序号为n的断点
disable breakpoints:禁用断点
enable breakpoints:启用断点
info(或i) breakpoints:参看当前设置了哪些断点
display 变量名:跟踪查看一个变量,每次停下来都显示它的值
undisplay:取消对先前设置的那些变量的跟踪
until X行号:跳至X行
breaktrace(或bt):查看各级函数调用及参数
info(i) locals:查看当前栈帧局部变量的值
quit:退出gdb


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

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

相关文章

股东减持,营收“四连降”,三只松鼠用什么撑起“百亿”野心?

近日,国内零食品牌三只松鼠(SZ:300783)发布了2023年业绩报告。从规模效益的层面出发,三只松鼠在高端化和高性价比逻辑下对门店进行了集中优化,虽然营收略有下降,但利润端却实现了强势回暖。 不过&#xff…

表达式求值(后缀表达式)(数据结构)

一、概念 算术表达式是由操作数(运算数)、运算符(操作符)、和界线符(括号)三部分组成,在计算机中进行算术表达式的计算是通过堆栈来实现的。 二后缀表达式的逻辑和实现方式(逆波兰…

4*5的矩阵(C语言)

一、N-S流程图&#xff1b; 二、运行结果&#xff1b; 三、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int i 0;int j 0;int result 0;//嵌套循环输出&#xff1b;for (i 1; i < 4; i){//列…

冯喜运:4.22黄金蒋继续“消化超买“,原油回落,通胀担忧缓解?

【 黄金消息面解析】&#xff1a;上周五(4月19日)伊朗媒体似乎淡化了以色列袭击的影响&#xff0c;表明地缘政治风险降低&#xff0c;导致避险资产需求放缓&#xff0c;金价回吐涨幅。上周现货黄金价格上涨超2%。美国黄金期货收盘上涨0.7%&#xff0c;至2413.8美元。从长期来看…

前端开发攻略---合并表格单元格,表格内嵌套表格实现手风琴效果。

1、演示 2、思路 1、用传统的 <table></table> 表格标签来实现比较麻烦。因此通过模拟 表格标签 的写法用<div></div>来实现 2、表头和表格列数是相同的&#xff0c;因此可以确定代码结构 <div class"table"><div class"head…

【Linux 进程间通信】管道(三)

文章目录 1.管道的五种特征2.管道的四种情况 1.管道的五种特征 ①&#x1f34e;匿名管道只能用于有血缘关系的进程之间进行通信&#xff08;爷孙进程之间可以进行通信&#xff09;&#xff0c;常用于父子之间进行通信&#xff1b; ②&#x1f34e;管道内部&#xff0c;自带进…

Mysql的【存储引擎】之【InnoDB】与【MyISAM】的区别

目录 1.存储引擎在 MyISAM 和 InnoDB 有什么区别 2.Mysql 5.7 默认的存储引擎是什么 3.一个简单例子&#xff08;如果非要使用【MyISAM】存储引擎 &#xff09; 4.2009年写的留言板程序的数据&#xff08;存储引擎是&#xff1a;【MyISAM】&#xff09; 5.mysql 8.0 可以使…

【简单讲解下如何用爬虫玩转石墨文档】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

UV胶水能够粘接丙烯腈-丁二烯-苯乙烯共聚物ABS吗?

UV胶水能够粘接丙烯腈-丁二烯-苯乙烯共聚物ABS吗&#xff1f; UV胶水通常能够用于粘接丙烯腈-丁二烯-苯乙烯共聚物&#xff08;ABS&#xff09;。UV胶水的优势之一是其适用于多种材料的粘接&#xff0c;包括ABS。然而&#xff0c;成功的粘接还取决于一些因素&#xff0c;包括表…

ActiveMQ 如果数据处理出现异常会怎么样

我们有一个 Spring 的客户端&#xff0c;在处理消息的时候因为程序的原因出现消息处理异常。 对这种情况&#xff0c;ActiveMQ 会把出现异常的消息放在 DLQ 队列中进行持久化。 因此&#xff0c;在 ActiveMQ 消息处理队列中需要持续关注 DLQ 队列&#xff0c; DLQ 的队列都是无…

记录好用的python包

记录好用的python包 PipxCentos 安装pipx确保 Pip 被安装更新 Pip安装 Pipx添加 Pipx 到 PATH临时添加到 PATH:永久添加到 PATH: 验证 Pipx 安装 Hatch安装特性 Poetry安装准备工作创建虚拟环境激活虚拟环境安装包追踪 & 更新包常用配置pycharm 远程连接poetry创建的虚拟环…

《QT实用小工具·三十四》Qt/QML使用WebEngine展示的百度ECharts图表Demo

1、概述 源码放在文章末尾 该项目实现了百度ECharts图表的样式&#xff0c;效果demo如下所示&#xff1a; 项目部分代码如下所示&#xff1a; #include <QGuiApplication> #include <QQmlApplicationEngine> #include <QtWebEngine>int main(int argc, ch…

第二证券|炒股如何降低成本?降低成本放大收益!

炒股便是以股票为出资标的&#xff0c;以低价买入、高价卖出的办法赚取差价&#xff0c;其核心内容便是通过证券市场的买入与卖出之间的股价差额获利。那么炒股怎么下降本钱&#xff1f;下面就由第二证券为大家剖析&#xff1a; 炒股怎么下降本钱&#xff1f; 1、股价跌落买进…

8.0 新特性 - RESOURCE GROUP

文章目录 前言1. 应用场景2. 资源组介绍3. 资源组维护4. 资源组的限制 前言 MySQL 是单进程多线程的程序&#xff0c;在 8.0 之前所有的线程优先级都是相同的&#xff0c;并且所有的线程资源都是共享的。8.0 之后推出 RESOURCE GROUP 特性 DBA 可以通过资源组的方式修改线程优…

怎么开通扣款服务(原委托代扣),看这一篇就足够你快速开通自动续费周期扣款了。

一、什么是扣款服务 扣款服务&#xff08;原委托代扣&#xff09;为微信支付为商户和用户提供的&#xff0c;可以在交易场景之外完成支付的能力。委托代扣是指商户取得用户的扣款授权后&#xff0c;向微信支付发起从用户账户扣款至商户账户的扣款指令,微信支付无需验证用户的支…

解开Intel ECI 的面纱

前言 Intel ECI是一个用于工业领域边缘控制的软硬件平台&#xff0c;我们今天主要探索的是软件部分&#xff0c;也就是系统镜像。区别于传统的Ubuntu或者Debian&#xff0c;ECI的强大之处在于它的实时性以及对于Intel自家芯片的缓存优化能力极强。 那么让我们来探索一下 编译…

Access denied for user ‘zabbix‘@‘localhost‘ (using password: NO)

现象 排查过程 进入数据库show grants for zabbixlocalhost;select host,user from mysql.user;cat /etc/zabbix/zabbix_server.conf | grep DB | grep -vE ‘#|$’cat /etc/zabbix/web/zabbix.conf.php | grep DB 解决办法 mysql 8.0以下 DPassword123.com mariadb -e "…

手写一个Spring IOC框架

目录 一&#xff0c;Spring IOC 二&#xff0c;流程图设计 三&#xff0c;设计思路解析 三&#xff0c;开始写代码 1.准备工作: 2.扫描并加载类信息 3.初始化bean 4.测试一下 一&#xff0c;Spring IOC Spring IoC容器是Spring框架的核心&#xff0c;它通过读取配置信息…

木马——文件上传

目录 1、WebShell 2.一句话木马 靶场训练 3.蚁剑 虚拟终端 文件管理 ​编辑 数据操作 4.404.php 5.文件上传漏洞 客户端JS检测 右键查看元素&#xff0c;删除检测代码 BP拦截JPG修改为php 服务端检测 1.MIME类型检测 2.文件幻数检测 3.后缀名检测 1、WebShell W…

【网络协议】 TCP与UDP协议区别及应用场景深度分析

1. TCP与UDP简介 1.1 TCP 1.1 定义 TCP&#xff08;TransmissionControl Protocol&#xff09;传输控制协议。 是一种可靠的、面向连接的协议&#xff08;eg:打电话&#xff09;、传输效率低全双工通信&#xff08;发送缓存&接收缓存&#xff09;、面向字节流。使用TCP的应…