Linux:gdb调试器的解析+使用(超详细版)

Linux调试器-gdb

背景:

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

debug模式:可以被调试;

release模式:不可以被调试。

为什么需要debuy和release这两个模式呢?

答:程序员在开发的时候需要去调试代码,所以需要debuy模式,而用户一般不懂这些代码的调试不需要debuy模式,只需要快速的下载和安装,所以release把调试信息的部分去掉了,体积也得到了减小,更适合给用户使用(测试环节也是使用release模式)。

Linux gcc/g++出来的二进制程序,1.默认是release模式,2.默认是动态链接。
要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项(生成debug模式)。

此时:我们还需要知道调试究竟是在干什么?

        1.找到问题(查找、范围查找、局部逐行查找……)

        2.解决问题(根据上下文代码逻辑)

实践:

首先:如果没有安装gdb:yum install -y gdb

要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项(生成debug模式),这里我们为了方便将执行放入到makefile中(自动构建)。

此时再写一个用于调试的程序:test.c

基于上面得到kezhix程序mytest后还可以查看可执行程序的格式:
readelf -S mytest | grep -i debuy

调试的指令:

命令解析
ctrl + d 或 quit 调试命令gdb binFile 退出
list( l )  行号显示binFile源代码,接着上次的位置往下列,每次列10行。
list( l ) 函数名列出某个函数的源代码。
run( r )运行程序。
next( n )单条执行。
step( s )进入函数体调用
break(b) 行号在某一行设置断点
break(b) 函数名在某个函数开头设置断点
info break( b )查看断点信息。
finish执行到当前函数返回,然后停下来等待命令
print( p ) 打印表达式的值,通过表达式可以修改变量的值或者调用函数
p 变量打印变量值(显示一次)。
set var修改变量的值
continue( c )从当前位置开始连续而非单步执行程序
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

调试指令的使用:

有了上面的基础,我们就可以来调试程序了:

list/l  行号:显示binFile源代码,接着上次的位置往下列,每次列10行。回车键实现下翻!

r或run:运行程序。相当于VS的F5!

break(b) 行号:在某一行设置断点,相当于VS的F9!

info break :查看断点信息。这里Linux引入了断点编号的概念,即:给断点设置编号,开启/关闭断点需要使用对应的断点编号!

delete breakpoints n:删除序号为n的断点

disable breakpoints:禁用断点
enable breakpoints:启用断点

n 或 next:单条执行。相当于VS的F10!
s或step:进入函数调用。相当于V的F11!

display 变量名:跟踪查看一个变量,每次停下来都显示它的值。
undisplay:取消对先前设置的那些变量的跟踪。

需要注意的是这里也使用了,序号的概念,取消跟踪需要输入对应的序号!

continue(或c):从当前位置开始连续而非单步执行程序,直接从一个断点到下一个断点。

breaktrace(或bt):查看各级函数调用及参数,现在所属调用的堆栈。

如下:在test.c的main()主函数的第22行!

finish:执行到当前函数返回,然后停下来等待命令。

需要注意:finish在主函数中使用是无效的,必须在调用的函数中使用才有效!

如下:因为在for循环设置了断点所以有一次的停留,回车后就直接运行到函数结束,并回到主函数的下一个断点!

until X行号:跳至X行.

需要注意:until跳转无法越过断点,还是会在断点停留,可以回车跳过断点。

set var name=value:修改一个变量的内容(不需要改代码,进行多分支测试!)

        当我们在gdb(调试)时输入一条指令,是会自动记录最近一条指令的,所以我们想继续上一条指令操作时就可以<回车>来继续执行。

 以上就是个人学习的见解和学习过程的解析,欢迎各位大佬在评论区探讨,交流!

如果本篇对你有帮助的话,三连支持一下吧。

感谢大佬们的三连! 感谢大佬们的三连! 感谢大佬们的三连!

                                              

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

项目总结报告(案例模板)

软件项目总结报告模板套用&#xff1a; 项目概要项目工作分析经验与教训改进建议可纳入的项目过程资产 --------进主页获取更多资料-------

最新AIGC创作系统ChatGPT网站源码,Midjourney绘画系统,支持GPT-4图片对话能力(上传图片并识图理解对话),支持DALL-E3文生图

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…

【腾讯云云上实验室】向量数据库与数据挖掘分析的黄金组合指南

前言&#xff1a; 在当今信息化时代&#xff0c;掌握对数据进行挖掘和分析的能力变得愈发关键。根据需求精准处理数据不仅仅是一项技能&#xff0c;更是对未来决策和操作的至关重要的支持。除了熟练运用适当的算法模型对大数据进行挖掘和分析外&#xff0c;合理高效存储和处理大…

[原创](免改BIOS)使用Clover升级旧电脑-(高阶玩法)让固态硬盘内置Win11 PE启动系统

[简介] 常用网名: 猪头三 出生日期: 1981.XX.XXQQ: 643439947 个人网站: 80x86汇编小站 https://www.x86asm.org 编程生涯: 2001年~至今[共22年] 职业生涯: 20年 开发语言: C/C、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Studio、Delphi…

Qt项目打包发布超详细教程

https://blog.csdn.net/qq_45491628/article/details/129091320

定制手机套餐---python序列

if __name__ __main__:print("定制手机套餐")print("")#定义电话时长&#xff1a;字典callTimeOptions{1:0分钟,2:50分钟,3:100分钟,4:300分钟,5:不限量}keyinput("请输入电话时长的选择编号&#xff1a;")valuecallTimeOptions.get(key)if val…

必看!精品小程序UI设计模板,6款一网打尽!

身处于网络世界日新月异的变革中&#xff0c;智能手机已然成为我们日常生活、学习和工作的必不可少的伙伴。而小程序&#xff0c;这种无需额外下载和安装&#xff0c;随时随地都能用上的应用&#xff0c;因其便捷快速&#xff0c;功能丰富的特色&#xff0c;赢得了广大用户的喜…

SpringBoot3核心原理

SpringBoot3核心原理 事件和监听器 生命周期监听 场景&#xff1a;监听应用的生命周期 可以通过下面步骤自定义SpringApplicationRunListener来监听事件。 ①、编写SpringApplicationRunListener实现类 ②、在META-INF/spring.factories中配置org.springframework.boot.Sprin…

11-23 SSM4

Ajax 同步请求 &#xff1a;全局刷新的方式 -> synchronous请求 客户端发一个请求&#xff0c;服务器响应之后你客户端才能继续后续操作&#xff0c;请求二响应完之后才能发送后续的请求&#xff0c;依次类推 有点&#xff1a;服务器负载较小&#xff0c;但是由于服务器相应…

Python大语言模型实战-记录一次用ChatDev框架实现爬虫任务的完整过程

1、模型选择&#xff1a;GPT4 2、需求&#xff1a;在win10操作系统环境下&#xff0c;基于python3.10解释器&#xff0c;爬取豆瓣电影Top250的相关信息&#xff0c;包括电影详情链接&#xff0c;图片链接&#xff0c;影片中文名&#xff0c;影片外国名&#xff0c;评分&#x…

C百题--8.计算并给定整数的所有因子和

1.问题描述 计算并给定整数的所有因子和&#xff08;不包括1和自身&#xff09; 2.解决思路 给定一个整数n&#xff0c;从i2开始遍历&#xff0c;如果n%i0则说明是因子&#xff0c;进行求和即可 3.代码实现 #include<stdio.h> int main(){int n,sum;scanf("%d&…

redis运维(十二) 位图

一 位图 ① 概念 1、说明&#xff1a;位图还是在操作字符串2、位图玩字符串在内存中存储的二进制3、ASCII字符通过映射转化为二进制4、操作的是字符串value ② ASCII字符铺垫 1、控制ASCII字符 2、ASCII可显示字符 ③ SETBIT 细节&#xff1a; setbit 命令的返回值是之…

构造命题公式的真值表

构造命题公式的真值表 1&#xff1a;实验类型&#xff1a;验证性2&#xff1a;实验目的&#xff1a;3&#xff1a;逻辑联结词的定义方法4&#xff1a;命题公式的表示方法5&#xff1a;【实验内容】 1&#xff1a;实验类型&#xff1a;验证性 2&#xff1a;实验目的&#xff1a…

中伟视界:AI分析盒子——ai算法中通过什么方法做到一个对象只报警一次,为每个对象生成一个唯一ID

在AI算法中&#xff0c;通过特定的方法实现对象只报警一次&#xff0c;为每个对象生成唯一ID是非常重要的技术问题。随着人工智能技术的快速发展&#xff0c;AI算法在各个领域得到了广泛应用&#xff0c;如安防监控、智能交通、自动驾驶等。而在这些应用场景中&#xff0c;需要…

2023年【制冷与空调设备安装修理】考试报名及制冷与空调设备安装修理考试资料

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 制冷与空调设备安装修理考试报名考前必练&#xff01;安全生产模拟考试一点通每个月更新制冷与空调设备安装修理考试资料题目及答案&#xff01;多做几遍&#xff0c;其实通过制冷与空调设备安装修理模拟试题很简单。…

VBA即用型代码手册之工作薄的关闭保存及创建

我给VBA下的定义&#xff1a;VBA是个人小型自动化处理的有效工具。可以大大提高自己的劳动效率&#xff0c;而且可以提高数据的准确性。我这里专注VBA,将我多年的经验汇集在VBA系列九套教程中。 作为我的学员要利用我的积木编程思想&#xff0c;积木编程最重要的是积木如何搭建…

番外篇之矩阵运算

矩阵的运算代码&#xff08;加减乘除&#xff09;&#xff08;内有注释&#xff09; #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #define ROW 10 //定义行 #define COL 10 //定义列 //设置全局变量A矩阵的m代表实际矩阵的行数&#xff0c;n代表实际矩阵的列…

流程图是什么,用什么软件做?

在工作流程中&#xff0c;经常会遇到需要图形化呈现整个流程的情况。流程图就是一种一目了然的图形化表现方式&#xff0c;便于人们理解、沟通和管理整个流程。 1.Visio Visio是一款微软公司的图表软件&#xff0c;可以用于创建各种类型的流程图、组织结构图、网络图、平面图…

js粒子效果(二)

效果: 代码: <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Particle Animation</title><…

【数据结构】二叉排序树(c风格、结合c++引用)

目录 1 基本概念 结构体定义 各种接口 2 二叉排序树的构建和中序遍历 递归版单次插入 非递归版单次插入 3 二叉排序树的查找 非递归版本 递归版本 4 二叉排序树的删除&#xff08;难点&#xff09; 1 基本概念 普通二叉排序树是一种简单的数据结构&#xff0c;节点的值…