Linux(CentOS 7)--gdb的基本调试指令

news2024/11/18 7:41:21

一下面的代码为例介绍一下linux中,gdb调试的基本指令

创建一个文件myfile.c,文件代码内容如下

  1 #include <stdio.h>
  2 
  3 int Add(int x, int y)
  4 {
  5   
  6   return x+y;                                                                                                    
  7 }
  8           
  9 int main()
 10 {            
 11   int a = 10;
 12   int b = 20;
 13                       
 14   int ret = Add(a, b);
 15   printf("%d\n", ret);
 16            
 17   return 0;
 18 }

gcc myfile.c编译过后的文件是不支持调试的(release版本)

所以 

我们要带上-g选项 gcc -g myfile.c 让gcc以debug的方式编译程序

 此时成功了!

l (行号/函数名):显示源代码

默认每次列10行

r (run) :运行程序(开始调试)

 因为我们还没有为这段代码设置断点,所以在我们开始调试的时候程序就直接结束并输出结果了。

b(break) 行号/函数:在某一行/函数处设置断点

下面我们在11行设置一个断点:

  •  Breakpoint 1表示这个断点的序号为1号,后面的是地址(不用管)
  • file mytest.c表示在哪个文件当中
  • line 11表示的是代码中的行号

此时我们再 r 一下,程序就会停在11行处:

 c(continue) :跳到下一个断点处

我们在14行处再设置一个断点,然后利用c直接的跳到第二个断点处

n(next) 逐过程 :(不进入函数体内部)

注意,调试结束的时候,断点是不会自动删除的,我们再次按下r,还是会跳到第一个断点处

 d(delete breakpoints) 断点的序号  :删除断点

d不加断点序号时,是删除所有的断点,加上序号,只删除改序号的断点

info b :查看断点信息

 其中Enb这一列表示的是,该断点是否是被启用,y表示启用,n表示禁用,在某些场景下,我们希望某个断点失去它的作用(忽略该断点的存在),但希望留下它的位置,就可以使该断点禁用,但不删除它。

现在我们来删除第二个断点:

 s(step) :逐语句(进入函数体内部)

 

p :显示变量

 但是这个显示并不会一直保留在屏幕上,如下:

 当我们再执行n的时候,a b ret的值就会不再显示,如果想要一直显示,就需要用到下面一个命令

diplay :常显示

 左边的序号作用和断点的序号一样,在我们需要取消常显示的时候,就要根据序号来取消,而不是名称

undisplay :取消常显示

接下来介绍几个比较特殊的命令

finish :执行到当前函数返回, 然后停下来

我们进入Add函数之后,输入finish,就会执行完这个函数,不论函数有多长,都会执行完,然后停在返回处。

 最后一行的Value returned is $7 = 30表示的是返回的有效值是30。

 我们看到此时的ret还没有被赋值,是随机值

 完成赋值!

disable breakpoints :禁用断点

enable breakpoints :启用断点

我们再在15行设置一个断点,但是禁用该断点

此时我们进行c,调试就会直接结束,而不会停在15行!

 

我们开启15断点的启用 

就会停在15行的断点处 

 

 info locals :查看当前栈帧的局部变量的值

有了这个,我们就可以直接查看当前所有的局部变量的值

但是不会常显示。

bt(breatracek) :查看各级函数调用和参数(各个函数调用之前的关系)

我们进入Add函数之后,输入bt:

 until 行号:直接跳到某一行

 最后就是q(quit) :退出调试

 当我们的调试还没结束的时候,它会提示我们是否确认要退出,输入y是,n不。

当我们一次调试结束的时候,再退出调试,就不会询问我们了:

本文章介绍的仅仅是一些基本的gdb使用命令,并没有包含全部!

 

 

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

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

相关文章

高性能消息队列中间件MQ_part2

接上一篇part1的内容 RabbitMQ通配符模式_编写消费者 接下来我们编写通配符模式的消费者&#xff1a; // 站内信消费者 public class Customer_Station {public static void main(String[] args) throws IOException, TimeoutException {// 1.创建连接工厂ConnectionFactory…

springboot引入flink,maven打包插件需替换

目录说明说明 springboot引入flink后&#xff0c;如果要打包&#xff0c;传统的maven不行&#xff0c;要更换指定插件 <build><finalName>flink</finalName><plugins><plugin><groupId>org.apache.maven.plugins</groupId><art…

CMake 混编c和c++代码

准备工作 wsl 或者 有linux 系统(购买阿里云或者其他云服务器&#xff09;cmake, gcc, git 等一些必要的软件安装 环境 windows 下 的 wsl wsl 安装下载 例子 拿 Unix网络编程 举例, 作者对原生接口进行了封装, 我们需要编译使用在自己的工程 1. 创建空文件 cd E:\githu…

网络流量监控对OA系统性能分析案例

需求简介 某外高桥公司的OA系统是其重要的业务系统&#xff0c;OA系统负责人表示&#xff0c;部分用户反馈&#xff0c;访问OA系统时比较慢。需要通过分析系统看一下实际情况。 报告内容 本报告内容主要为&#xff1a;OA性能整体分析 分析时间 报告分析时间范围为&#xf…

同一条好友邀请信息给大量的人发,会导致领英账号被封吗?

做外贸的领英新人经常有一个问题&#xff1a;领英上添加好友时&#xff0c;同一条好友邀请信息给大量的人发&#xff0c;会导致领英账号被封吗&#xff1f; 这是一个被一部分人所忽略&#xff0c;也在被一部分人所担心的问题&#xff0c;因为很多领英新手都是在复制粘贴发送相…

游戏开发者的视觉盲区

本文首发于微信公众号&#xff1a; 小蚂蚁教你做游戏。欢迎关注领取更多学习做游戏的原创教程资料&#xff0c;每天学点儿游戏开发知识。嗨&#xff01;大家好&#xff0c;我是小蚂蚁。前天我刚发布了一个新的游戏作品——经典宝石方块。仍然是掌机模式&#xff0c;仍然是简约风…

JAVA开发(Web应用境外访问慢问题)

背景&#xff1a; 最近公司做的小程序出现在香港地区访问慢的问题。因为我们的应用是部署在大陆的腾讯服务器&#xff08;北京&#xff09;上&#xff0c;所以在香港地区访问大陆应用会比较慢。初步体验是4-5秒的响应速度。 影响的原因&#xff1a; 1、网络的原因&#xff0…

【HBase高级】7. HBase调优、常见问题处理

HBase调优 6.1 通用优化 NameNode的元数据备份使用SSD 定时备份NameNode上的元数据 每小时或者每天备份&#xff0c;如果数据极其重要&#xff0c;可以5~10分钟备份一次。备份可以通过定时任务复制元数据目录即可。 为NameNode指定多个元数据目录 使用dfs.name.dir或者dfs…

4.5--贪心--单源最短路径问题

设置顶点集合S并不断地作贪心选择--&#xff08;不属于这个集合S中距离"源"最短的顶点&#xff09;来扩充这个集合--更新最短距离 这张图需要放在最前面&#xff0c;就是经典dijkstra的主要思想。 为什么这样贪心是对的&#xff1f; 1、问题描述 给定带权有向图G (…

C++ 入门

C是在C的基础之上&#xff0c;容纳进去了面向对象编程思想&#xff0c;并增加了许多有用的库&#xff0c;以及编程范式等 文章目录一、命名空间二、输入输出三、缺省参数四、函数重载五、引用1. 引用的用法2. 常引用3. 引用的使用场景4. 引用的底层实现六、内联函数七、auto 关…

数组

循环队列中元素个数计算方法是固定的&#xff0c;即(尾-头)%长度&#xff0c;但是由于是循环队列所以尾可能会小于头&#xff0c;所以要加上长度&#xff0c;使尾-头保持是正整数&#xff0c;然后再对长度求余&#xff0c;即元素个数。循环队列中&#xff1a;头指针指向队列头元…

基于Java+Spring+Html的图书借阅管理系统详细设计和实现

博主介绍&#xff1a;✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

seo:百度统计

一、百度统计官网https://tongji.baidu.com/web5/welcome/login二、理解百度统计个人理解&#xff0c;添加这段代码到网站首页&#xff0c;有人访问该网站&#xff0c;即会加载这段代码&#xff0c;接着把信息发送到百度统计id 对应的百度统计账号&#xff0c;可从百度统计查看…

OpenMMLab AI实战课笔记 -- 第2节课

OpenMMLab AI实战课笔记 -- 第2节课1. 第二节课(图像分类)1.1 深度学习模型1.2 网络进化过程1.3 ResNet &#xff08;残差网络&#xff09;1.4 卷积的参数量1.5 卷积的计算量&#xff08;乘加次数&#xff09;1.6 降低模型参数量和计算量的方法1.7 可分离卷积1.8 注意力机制 At…

常见正则表达式使用参考

目录 一、正则函数 1.REGEXP 2.regexp_replace 3.regexp_extract 二、正则表达式 三、特殊字符转义 一、正则函数 1.REGEXP 语法格式&#xff1a; A REGEXP B &#xff08;A是需要匹配的字符串&#xff0c;B是正则表达式字符串&#xff09; 操作类型: strings 描述: …

UniTask详解

前言 UniTask为Unity提供一个高性能&#xff0c;0GC的async/await异步方案。 基于值类型的UniTask和自定义的 AsyncMethodBuilder 来实现0GC使所有 Unity 的 AsyncOperations 和 Coroutines 可等待基于 PlayerLoop 的任务( UniTask.Yield, UniTask.Delay, UniTask.DelayFrame…

哈工大机器学习复习笔记(四)

本篇文章是在参考西瓜书、PPT课件、网络上相关博客等资料的基础上整理出的机器学习复习笔记&#xff0c;希望能给大家的机器学习复习提供帮助。这篇笔记只是复习的一个参考&#xff0c;大家一定要结合书本、PPT来进行复习&#xff0c;有些公式的推导最好能够自己演算一遍。由于…

Scala 简单实现数据库连接池

在使用JDBC的时候&#xff0c;连接池是非常宝贵的资源。为了复用这些资源&#xff0c;可以将连接保存在一个队列中。当需要的时候可以从队列中取出未使用的连接。如果没有可用连接&#xff0c;则可以在一定时间内等待&#xff0c;直到队列中有可用的连接&#xff0c;否则将抛出…

浅谈估值模型:PB指标与剩余收益估值

摘要及声明 1&#xff1a;本文简单介绍PB指标的推导以及剩余收益的估值方式&#xff1b; 2&#xff1a;本文主要为理念的讲解&#xff0c;模型也是笔者自建&#xff0c;文中假设与观点是基于笔者对模型及数据的一孔之见&#xff0c;若有不同见解欢迎随时留言交流&#xff1b…

【HTML】HTML 标签 ① ( 骨架标签 | 双标签和单标签 | 嵌套关系和并列关系 | 文档类型 | 页面语言 | 编码字符集 )

文章目录一、HTML 标签简介二、HTML 骨架标签三、双标签和单标签四、嵌套关系和并列关系五、文档类型六、页面语言七、编码字符集一、HTML 标签简介 HTML 英文全称 " HyperText Mark-up Language " , 中文名称是 " 超文本标记语言 " ; 多媒体 : 超文本 指…