第六章 linux调试器——gdb的使用

news2024/11/24 2:11:01

第六章 linux调试器——gdb的使用

  • 一、前提
    • 1、debug与release
    • 2、gdb的安装
  • 二、常用调试指令
    • 1、开始调试
    • 2、代码显示
    • 3、断点设置
    • 4、代码执行
    • 5、信息监控
    • 6、退出调试

一、前提

1、debug与release

程序最终的发布方式分成两种,一种是debug模式,一种是release模式。通常情况下,g++/gcc编译后的可执行文件都是release模式,即发行模式。这两者有什么区别呢?debug模式是允许使用gdb来调试的,所以在debug模式中会含有一些调试信息,这种模式也通常是给程序员使用的。另外一种release模式叫做发行模式,这种模式是不包含调试信息的,所以无法用gdb调试,因此release模式通常是给用户使用的。

那么为了我们能用gdb来调试代码,我们需要在编译器的编译指令中加上-g。如下图所示:
在这里插入图片描述

2、gdb的安装

有的linux服务器中是没有gdb的,所以需要大家自行安装。因为作者使用的是乌班图的Linux,所以这里就贴一下乌班图的安装命令。

 sudo apt install gdb

二、常用调试指令

1、开始调试

我们需要在命令行中输入指令:

gdb 二进制可执行文件

如下图:
在这里插入图片描述
当我们开始调试以后,就可以输入一些gdb中的一些指令来debug了。

2、代码显示

l 行号                  //从第几行开始显示代码(往后显示10行),显示结束后,再按l,可以继续往后显示。
l 函数名                //列出某个函数代码

在这里插入图片描述

3、断点设置

b 行号                                           //在某一行设置断点
b 函数名                                         //在某个函数的开头设置断点
info break                                      //查看断点信息
delete breakpoints                              //删除所有断点
delete breakpoints                              //n删除序号为n的断点
disable breakpoints  断点编号                     //禁用断点
enable breakpoints   断点编号                     //启用断点

设置断点
在这里插入图片描述
查看或修改断点
在这里插入图片描述

4、代码执行

r                        // 运行程序。
n                        // 逐过程执行。
s                      	 // 逐语句执行。
until x                  //跳至x行
finish                   // 执行到当前函数返回,然后停下来等待后续的命令。

5、信息监控

p 变量                   // 打印变量的数值
set var                 // 修改变量的数值
c                       // 从当前位置开始连续而非单步执行程序
display 变量             // 跟踪查看变量,每次停下来都显示该变量的数值 
undisplay                //取消跟踪某个变量

6、退出调试

quit                        // 退出调试

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

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

相关文章

华为OD机试真题 Python 实现【机器人活动区域】【2023Q1 200分】

目录 一、题目描述二、输入描述三、输出描述四、解题思路五、Python算法源码六、效果展示1、输入2、输出 一、题目描述 现有一个机器人,可放置于 M N的网格中任意位置,每个网格包含一个非负整数编号。当相邻网格的数字编号差值的绝对值小于等于 1 时&a…

redis-单节点安装

daemonize yes port 6379 bind 0.0.0.0 requirepass 123456 save 3600 1 300 100 60 10000dir /usr/local/redis dbfilename dump.rdb logfile redis.log pidfile redis.pid##save 3600 1 300 100 60 10000 ##3600秒(一小时),至少有一个值的话,会进行存盘 ##300秒(五分钟),至少…

探索性测试: 工具和方法的综合应用

1、前言 2、工具的使用 1、测试管理工具 2、缺陷跟踪工具 3、测试自动化工具 4、探索性测试工具 5、代码覆盖率工具 6、日志分析工具 7、网络抓包工具 8、数据库查询工具 9、并发和负载测试工具 10、安全测试工具 11、API测试工具 12、数据生成工具 13、异常处理和边界测试工具…

server2012远程桌面RDP120过期后修改

运行regedit 进入 HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Terminal Server \ RCM \ GracePeriod ,选中 GracePeriod 重启电脑Ok

572. 另一棵树的子树

另一棵树的子树 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right right class Solution:def isSubtree(self, root: Optional[Tre…

ROS 编码器转Odom

双轮差速模型 移动距离 delta_dist (encoder_right encoder_left)/linesNum * circumference / 2; 旋转角度 Delta_th (float)(encoder_right - encoder_left) / wheel_track; 将移动距离转换到车体坐标系 delta_x cos(delta_th) * delta_dist; delta_y -sin(delta_th) * …

前端页面优化策略

目录 1 为什么要优化2 优化方案3 加载策略优化3.1 script执行时机3.2 预加载资源prefetch 和 preloaddns-prefetch 和 preconnect 4 骨架屏4 资源请求优化4.1 图片懒加载及异步解码方案 1 为什么要优化 从用户角度看,优化能够让页面加载得更快、对用户操作响应更及…

领域事件驱动DDD(一) 值对象以及实体

对领域事件驱动的一些知识的梳理(以下内容是从内到外进行梳理) 值对象:一个没有标识符的对象。 值对象通常不会被修改,而是通过创建新的值对象来表示不同的状态。 没有自己的生命周期,它们随着所属的实体或聚合根的…

自动化测试-Selenium

目录 什么是自动化测试 Selenium介绍 Selenium是什么 Selenium特点 Selenium工作原理 SeleniumJava环境搭建 1.下载chrome浏览器,查看版本号. 2.下载chrome浏览器驱动 3.配置环境变量 4.创建java项目,在pom文件中添加依赖 5. 验证环境是否搭建成功 Selenium常用API…

libevent实践08:实现定时器第二季

简介 获取libevent的版本号字符串 /**Get the Libevent version.Note that this will give you the version of the library that yourecurrently linked against, not the version of the headers that youvecompiled against.return a string containing the version numbe…

利用RabbitMQ实现消息投递削峰填谷

目录 异步和同步如何选择 异步线程 同步收发消息 一、导入依赖库 二、创建RabbitMQ配置类 三、创建消息任务类 异步和同步如何选择 依靠多线程,Java代码可以同步执行也可以异步执行 RabbitMQ提供了同步和异步两种收发消息模式 我们采用 Java异步线程 MQ同步…

MongoRepository

一、介绍 MongoRepository是一个接口,与HibernateRepository类似,通过继承MongoRepository接口,我们可以非常方便地实现对一个MongoDB集合中的文档数据进行增删改查,示例如下所示: import org.bson.types.ObjectId; import org.springframework.data.mongodb.repository…

[数据结构 -- 手撕排序第一篇] 插入排序

目录 1、常见的排序算法 2、插入排序的思路 2.1 基本思想 2.2 直接插入排序 2.2.1 单趟排序的思路 2.2.2 单趟排序代码实现 3、插入排序代码 4、插入排序打印测试 5、插入排序的时间复杂度 5.1 最坏情况 5.2 最好情况 6、直接插入排序的特性总结 1、常见的排序算法 2、插入排序…

SpringMVC (二) 第一个MVC程序

学习回顾:SpringMVC (一) 什么是SpringMVC Hello,SpringMVC 现在我们来看看如何快速使用SpringMVC编写我们的程序吧! 一、配置版 1、新建一个Moudle , springmvc-02-hello , 添加web的支持&…

Spring面试题--AOP

什么是AOP,你们项目中有没有使用到AOP? AOP称为面向切面编程,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为“切面”(Aspect&a…

2024中山大学898水文地质与工程地质考研初试复习资料

C8260153[电子书]2024年中山大学898水文地质与工程地质考研精品资料 说明:本套资料由高分研究生潜心整理编写,高清电子书,考研推荐资料。 一、考研真题及重点名校真题 1.附赠重点名校真题 ①重点名校:水文地质学基础2010-2013…

魏副业而战:抖音图文带货玩法,月入5w+

我是魏哥,与其在家躺平,不如魏副业而战! 最近魏哥一直在研究短视频带货,看了很多案例,发现了一些NB的账号。 说真的,视频带货真的可以认真的研究研究,不管是做直播,还是发视频&…

【C++11】左值引用 与 右值引用

定义 左值 / 左值引用 左值(Lvalue): 左值是一个表示数据的表达式(如变量名或解引用的指针),我们可以 对它取地址 可以对它赋值,左值可以出现赋值符号的左边,右值不能出现在赋值符号左边。定义时const修…

青少年机器人技术一级核心知识点:机械结构及模型(二)

随着科技的不断进步,机器人技术已经成为了一个重要的领域。在这个领域中,机械结构是机器人设计中至关重要的一部分,它决定了机器人的形态、运动方式和工作效率。对于青少年机器人爱好者来说,了解机械结构的基础知识,掌…

持续集成工具Jenkins安装和部署

前言 Jenkins的执行流程图如下: 1. 前期准备 1.1 安装JDK 目前新版本的Jenkins对JDK的要求基本上都在JDK11以上,所以我这边将我服务器的JDK版本升级成为JDK11。 具体升级步骤如下: 下载安装包 官网可能需要注册账号,这里我…