Linux调试器---gdb的使用

news2024/11/14 3:05:32

顾得泉:个人主页

个人专栏:《Linux操作系统》  《C/C++》

键盘敲烂,年薪百万!


一、gdb的背景

       gdb,全称为GNU调试器(GNU Debugger),是一个功能强大的源代码级调试工具,主要应用于Unix系统,以及Linux下的程序开发。它与GCC一样,都是源于GNU计划,同GCC、Emacs等工具同期诞生。在嵌入式开发中,gdb的使用非常广泛,对于程序的调试有着不可替代的作用,因此对每位嵌入式开发工程师而言都有着至关重要的意义。

       gdb提供了多种强大的功能,以帮助程序员查看程序在执行过程中的内部状态,如:设置断点、单步执行、查看变量值等。这些功能都极大地方便了程序员对程序的调试工作。


 二、gdb的安装

使用该指令安装gdb调试器:(Ubuntu环境)

        sudo apt-get install gdb

 如果有小伙伴使用上述命令无法安装,尝试这个命令:

        yum install -y gdb


三、Debug和Release

       默认我们已经创建好了text.c和makefile文件

        我们进行make编译:

       接着我们对text文件进行gdb调试:

       无法调试!为什么呢?

       1.程序的发布方式有两种,debug模式和release模式

       2.Linux gcc/g++出来的二进制程序,默认是release模式,release模式下无法调试

       3.要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项

       我们接下来对makefile文件进行修改,加上  -g选项:

        接下来我们尝试进行调试:

       可以进行调试了 。


四、gdb的基础使用

1.进入和退出

       进入:gdb 文件名

       退出:CTRL+d或者quit

2.查看调试的代码

 list    or   l  +  行号,显示指定行之后的代码(自动记录最后一条指令)

3.断点

1.打印断点(三种方式)

1.b+行号

2.b+函数名+行号

       由于我的疏忽忘记编辑函数,就不进行展示了,大家可以自行练习

3.b+文件名+行号(适用于多文件下)

2.查看断点

        info b

3.删除断点

       d,注意在删除断点中,显示的是编号,而不是行号。

4.使能(禁用/开启)断点

1.禁用:disable

       这里的y,n代表断点是否启用,由上图可以看出3号断点已经被禁用。

2.开启:enable

4.代码执行结束

       r,直接把要调试的代码全部执行

5.查看调用堆栈

       因为我的text文件比较简单,没有进行调用堆栈,大家感兴趣的可以自行练习。

 五、扩展完善

        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


结语:Linux调试器关于gdb使用的分享到这里就结束了,没有进行展示的操作大家可以自行练习,希望本篇文章的分享会对大家的学习带来些许帮助,如果大家有什么问题,欢迎大家在评论区留言~~~ 

 

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

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

相关文章

【C++】【Opencv】霍夫直线检测即cv::HoughLinesP()函数详解和示例

cv::HoughLinesP()(函数霍夫直线)功能分析是一种用于检测图像中直线的算法,它基于霍夫变换的原理。通过该算法,我们可以从图像中提取出直线信息,从而对图像进行分析和处理。主要经理边缘检测和霍夫直线处理两个步骤。本…

【LeetCode刷题-树】--100.相同的树

100.相同的树 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* …

C/C++统计数 2021年12月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析

目录 C/C统计数 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 C/C统计数 2021年12月 C/C编程等级考试一级编程题 一、题目要求 1、编程实现 给定一个数的序列S,以及一个区间[L, R], 求序列…

Codeforces Round 910 (Div. 2)(D~F)

1898D - Absolute Beauty 题意:给定长度为n的数组a和b,定义b数组的价值为,现可以交换一次b数组中的任意两个元素,求b数组的价值最大值。 思路:绝对值问题可以放在数轴上去解决。绝对值即为区间长度 观察上述三种情况&…

认识.NET Aspire:高效构建云原生应用的利器

简介 在几天前的.NET 8发布会上,来自微软的Glenn Condron和David Fowler为我们演示了.NET Aspire,在Visual Studio的帮助下,它展现出了惊人的开发效率。 短短的十分钟内,David现场演示了如何轻松创建了一个具有服务发现&#xf…

汽车标定技术--A2L格式分析

目录 1.A2L由来 2.A2L格式 2.1 PROJECT 2.2 MODULE中包含的内容 3. INCA和CANape兼容吗? 最近有朋友用Vector ASAP2Editor编译的A2L文件在INCA7.4中无法识别,我记得以前做的时候是可以识别的,难不成最近有什么变动吗?出于好…

JavaScript的学习,就这一篇就OK了!(超详细)

目录 Day27 JavaScript(1) 1、JS的引入方式 2、ECMAScript基本语法 3、ECMAScript 基本数据类型​编辑 3.1 数字类型 3.2 字符串 3.3 布尔值 3.4 空值(Undefined和Null) 3.5 类型转换 3.6 原始值和引用值 4、运算符 5、流程控制语句 5.1 分…

云原生微服务-理论篇

文章目录 分布式应用的需求分布式架构治理模式演进ESB 是什么?微服务架构 MSA微服务实践细节微服务治理框架sidercar 什么是service mesh?康威定律微服务的扩展性什么是MSA 架构?中台战略和微服务微服务总体架构组件微服务网关服务发现与路由…

ps找不到msvcp140.dll怎么办?亲测5个有效的修复方法分享

运行Photoshop时提示找不到MSVCP140.dll,这是因为计算机MSVCP140.dll文件丢失或者损坏。msvcp140.dll是微软Visual C 2015运行库的一部分,它包含了许多用于支持C运行的函数和类。当我们在使用某些程序时,如果这个程序依赖于msvcp140.dll&…

【c++随笔13】多态

【c随笔13】多态 多态性(Polymorphism)在面向对象编程中是一个重要概念,它允许以统一的方式处理不同类型的对象,并在运行时动态确定实际执行的方法或函数。一、什么是多态性?1、关键概念:C的多态性2、多态定…

构造函数,原型对象,实例对象

1.构造函数、原型对象、实例对象三者分别是什么? 构造函数:用来创建对象的函数,创建实例对象的模板 。构造函数的函数名尽量首字母大写(为了区分普通函数和构造函数)原型对象:每一个函数在创建的时候,系统都会给分配一…

【Android Jetpack】DataStore的介绍

DataStore Jetpack DataStore是一种数据存储解决方案,允许您使用协议缓冲区存储键值对或类型化对象。DataStore使用Kotlin协程和Flow以异步、一致的事务方式存储数据。 注意:如果您需要支持大型或复杂数据集、部分更新或参照完整性,请考虑使…

【算法挨揍日记】day28——413. 等差数列划分、978. 最长湍流子数组

413. 等差数列划分 413. 等差数列划分 题目描述: 如果一个数列 至少有三个元素 ,并且任意两个相邻元素之差相同,则称该数列为等差数列。 例如,[1,3,5,7,9]、[7,7,7,7] 和 [3,-1,-5,-9] 都是等差数列。 给你一个整数数组 nums…

【wp】2023第七届HECTF信息安全挑战赛 Web

伪装者 考点:http协议flask的session伪造ssrf读取文件 首先根据题目要求就行伪造HTTP 这里不多说,比较基础 然后下面得到是个登入 页面,我们输入zxk1ing 得到 说什么要白马王子 ,一眼session伪造 看到ey开头感觉是jwt 输入看看 得…

动态规划专项---最长上升子序列模型

文章目录 怪盗基德的滑翔翼登山合唱队形友好城市最大上升子序列和拦截导弹导弹防御系统最长公共上升子序列 一、怪盗基德的滑翔翼OJ链接 本题思路:本题是上升子序列模型中比较简单的模型&#xff0c;分别是从前往后和从后往前走一遍LIS即可。 #include <bits/stdc.h>co…

深度学习中的图像融合:图像融合论文阅读与实战

个人博客:Sekyoro的博客小屋 个人网站:Proanimer的个人网站 abs 介绍图像融合概念&#xff0c;回顾sota模型&#xff0c;其中包括数字摄像图像融合&#xff0c;多模态图像融合&#xff0c; 接着评估一些代表方法 介绍一些常见应用&#xff0c;比如RGBT目标跟踪&#xff0c;…

PgSQL技术内幕-Bitmap Index Scan

PgSQL技术内幕-Bitmap Index Scan 1、简介 Bitmap索引扫描是对索引扫描的一个优化&#xff0c;通过建立位图的方式将原来的随机堆表访问转换成顺序堆表访问。主要分为两点&#xff1a;1&#xff09;管理每个Bitmap的hash slot没用完时&#xff0c;每个Bitmap代表每个heap页中满…

LeetCode【92】翻转链表II

题目&#xff1a; 思路&#xff1a; https://blog.csdn.net/DarkAndGrey/article/details/122146216 public ListNode reverseBetween(ListNode head, int left, int right) {if(head null || right left){return head;// 头节点为null&#xff0c;链表为空&#xff0c;反…

340条样本就能让GPT-4崩溃,输出有害内容高达95%?OpenAI的安全防护措施再次失效

仅需340个示例微调GPT-4&#xff0c;即可绕过安全限制&#xff0c;让模型说出“枪支改装方法”、“生化武器制作过程”等有害内容&#xff1f; OpenAI的安全防护措施再次失效&#xff0c;攻击的成功率高达95%&#xff01; 近日&#xff0c;美国顶尖大学UIUC与斯坦福联合对GPT…

华为麒麟服务器--硬盘问题

记录以下今天处理的服务器&#xff1a; 情况说明&#xff1a;linux 系统&#xff0c;不知道什么原因系统就突然不能用了&#xff08;据说是前段时间断电来着&#xff0c;但是机房有应急电源&#xff09;。 系统环境&#xff1a; 服务器&#xff1a;华为RH2288H V3 服务器 服…