Linux: GDB 调试工具

 

目录

概念:

Linux 下 debug 和 release 的区别:

GDB 的使用 : 

激活和进入工作模式:

 查看文件的内容:

运行调试的文件: 

打断点: 

 查看断点:

删除断点:

禁用断点:

​编辑

重新打开断点:

 逐过程 与 逐语句:

查看变量/监视功能: 

常显示: 

运行至下一个断点:

转跳行数: 

停止运行:


概念:

Linux GDB(GNU Debugger)是一个功能强大的调试工具,用于调试C、C++等编程语言的程序。它可以帮助开发人员定位和修复程序中的错误。

换句话而言,GDB 的功能就和VS中的调试功能一样,可以对C、C++代码进行调试。

Linux 下 debug 和 release 的区别:

在linux 编译语言的过程中,我们一般会使用gcc 命令将文件编译成可执行文件,但是,在编译文件的过程中,编译的文件分为两种,分别是debug文件和release文件,对于两种文件而言,前者是面向编译者,后者是面向客户。

而Linux是一种面向对象的语言,所以在编译的过程中,gcc一般都是使用release 作为默认的编译。

release模式下 编译的文件 比 debug模式下 编译的文件 内存要更小  

使用 -g 将gcc的编译模式从release 转变成 debug 

GDB 的使用 : 

激活和进入工作模式:

gdb 需要调试的文件

由于 gdb 是Linux系统默认自带的,所以只需要输入以上指令 进行激活即可使用。

进入 gdb 的工作模式后,可以使用命令 quit 或者  q 即可退出gdb 的工作模式,也就是退出调试 

quit  //q

 查看文件的内容:

list  //l

在进入 gdb 的工作模式后,使用list 命令 或者 l 命令 可以对 需要调试的文件进行内容的查看。

不过需要注意的是,只需要list 命令,并不需要输入其他的内容,以下是错误的示范:

同时,可以看到,在使用list 命令后 文件展示的内容只有十行, 并不是全部,所以想要查看其他行的内容,则可以使用 命令 :  list 行号 或者  list 文件名 : 关键字   又或者 list 文件名 : 行号  对文件内容进行具体的查看

list  行号  // l 行号 list 文件名 : 关键字  // l 文件名 :关键字 list 文件名 : 行号 // l 文件名 : 行号

list 文件名 :关键字 

list 文件名 : 行号 

list 行号 

当然,如果想要查看全文,那么只要输入文件开头的行号,随后一直摁下回车即可。 

同时需要注意的是,输入行号并不是直接以哪一行开头,而是会出现哪一行的相关上下行。 

运行调试的文件: 

run  // r

使用 r 或者 run 命令 对调试文件进行运行! 

不过,r命令 的运行 是直接启动到结束,如果需要查看某段代码的内容,或者对代码进行逐句的调试,则需要使用断点命令。 

打断点: 

b 需要打断点的代码行数

 使用命令  b 行数 或者 b 文件名 : 行数 或者 b 文件名 :关键代码  即可打上断点。

 查看断点:

使用 i b 或者 info b 对 断点进行查看,且需要注意的是,如图上图所示,在每一个断点的最前端,都有一个编号,这个编号一但被某个断点占用,那么其他断点就不会使用这个编号!

且之后的删除断点也和断点编号有关! 

删除断点:

使用 d 断点编号 即可删除 断点,同时需要注意,断点不能连续删除!

禁用断点:

disable  断点编号

可以看到 矢能 end 从 y 变成了n 表示禁用了!同时还要记住空行打断点是没有用的!

重新打开断点:
 enable 断点编号 

 逐过程 与 逐语句:

使用 n 或者 next 进行调试的逐过程,相当于VS中的F10进行代码的调试,使用的步骤是先使用 r 命令 进入运行阶段后,因为断点的原因,在使用n 进行代码的调试。 

同时可以使用 s 命令 对代码进行逐语句的调试,相当于VS 中的F11 

查看变量/监视功能: 

使用p 命令可以对 代码 中的变量进行监视 或者说查看变量当前的数据

p 需要监视的变量     //查看变量当前的数值
p &需要查看的变量   //查看变量的地址

常显示: 

 display 需要显示的变量,常显示顾名思义,就算需要显示的变量会在运行的代码下方显示,当然想要去掉常显示则使用 undisplay 需要取消常显示的变量的编号

常显示后,变量发生了变化显示的内容也会发生变化!如下图所示! 

注意,编号: 是常显示的内容,行号 是代码运行的内容 

运行至下一个断点:

 使用 c 或者 contine 命令 从当前断点转跳到下一个断点!

转跳行数: 

使用 until 行号 命令 转跳到指定行号进行运行,之前几行代码会立马执行完毕到当前的指定行。

停止运行:

finish 命令 可以时运行停下。

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

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

相关文章

猫头虎分享已解决Bug ‍ || Error: Target container is not a DOM element (React)

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

shell脚本之文件处理命令及字符切片处理

目录 一、文件处理工具 1、tr命令 1.1 转换字符 1.2 压缩字符及删除字符 2、seq命令 3、cut命令 ​4、tac命令 5、rev命令 6、sort命令 ​​​​​7、uniq命令 ​8、echo命令 9、date命令 二、字符串切片处理 1、取字符串的长度 2、跳过字符串最前边的字符 3、…

C++入门(上)

文章目录 1:什么是C2.C的发展史3:C关键字(C98)4:命名空间4.1:命名空间的概念4.2:命名空间的定义4.3:命名空间的使用4.3.1加命名空间的名称以及域作用限定符4.3.2:使用using将命名空间中某个成员引入4.3.3:使用using namespace 命名空间名称展开命名空间代码1代码2 5:C输入与输出…

用C语言列出Linux或Unix上的网络适配器

上代码&#xff1a; 1. #include <sys/socket.h> 2. #include <stdio.h> 3. 4. #include <netdb.h> 5. #include <ifaddrs.h> 6. 7. int main() { 8. struct ifaddrs *addresses; 9. if(getifaddrs(&addresses) -1) { 10. printf("…

Linux:信号的保存

文章目录 信号相关概念信号递达信号未决信号阻塞内核中的示意图 信号集的操作函数 前面对于信号的产生中对操作系统有了一个基础的认知&#xff0c;对于一个真正的操作系统来说&#xff0c;进程是由操作系统进行调度的&#xff0c;那操作系统本身也是代码&#xff0c;是由谁进行…

Python并发编程之多线程

前言 本文介绍并发编程中另一个重要的知识 - 线程。 线程介绍 我们知道一个程序的运行过程是一个进程&#xff0c;在操作系统中每个进程都有一个地址空间&#xff0c;而且每个进程默认有一个控制线程&#xff0c;打个比方&#xff0c;在一个车间中有很多原材料通过流水线加工…

MYSQL分区NOW()不支持

传说同事写个复杂的SQL代码,跑一次需要7-10秒, 复杂如上,我也懒得去分析 IF IF IF是怎么回事了! 发现此表是分区表,后面要求加上了分区时间,以便利用到分区裁剪技术. 因为需求是查近10天来到期还款的人和金额.就是今天应该还款的人, 一般还款周期是7天. 给个10天的范围挺可以的…

第3集《佛说四十二章经》

和尚尼慈悲、诸位法师、诸位同学&#xff0c;阿弥陀佛&#xff01; 请大家打开讲议第四面&#xff0c;三、随文释义。 前面讲到本经的修学纲要是顿渐兼收&#xff0c;理事无碍。本经的修学有两个主题&#xff1a; (一)顿教法门&#xff1a; 顿教法门是一种智慧的观照。修学…

腾讯云4核8G服务器多少钱一年?

腾讯云4核8G服务器S5和轻量应用服务器优惠价格表&#xff0c;轻量应用服务器和CVM云服务器均有活动&#xff0c;云服务器CVM标准型S5实例4核8G配置价格15个月1437.3元&#xff0c;5年6490.44元&#xff0c;标准型SA2服务器1444.8元一年&#xff0c;轻量应用服务器4核8G12M带宽一…

C++:理解拷贝在变量,指针,引用以及构造函数里的意义

变量&#xff0c;指针&#xff0c;引用 //拷贝与拷贝构造函数 //拷贝&#xff08;copy&#xff09;&#xff1a;拷贝数据&#xff0c;拷贝内存 //始终是在拷贝值&#xff0c;但是指针存储的是内存的地址&#xff0c;变量存储的是数据的值 //特别注意&#xff0c;在引用里面的拷…

新年加载中特效 —— 后期需要添加备注和消化

代码来源&#xff1a;链接: https://www.bilibili.com/video/BV1qA4m1573V/?spm_id_from333.880.my_history.page.click&vd_sourceb91967c499b23106586d7aa35af46413 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8&…

数据库管理-第14期 Oracle Vector DB AI-01(20240210)

数据库管理149期 2024-02-10 数据库管理-第149期 Oracle Vector DB & AI-01&#xff08;20240210&#xff09;1 机器学习2 向量3 向量嵌入4 向量检索5 向量数据库5 专用向量数据库的问题总结 数据库管理-第149期 Oracle Vector DB & AI-01&#xff08;20240210&#xf…

ChatGPT高效提问—prompt常见用法(续篇十一)

ChatGPT高效提问—prompt常见用法(续篇十一) 1.1 增加角色 ​ 在prompt里可以适当增加角色,来满足一些特殊场景的需求。先来看一个不带角色的简单示例。 输入prompt: ​ ChatGPT输出: ​ 如上所示,问题比较难,ChatGPT的答案也确实晦涩难懂。试想一下,如果将这个解释将…

猫头虎分享已解决Bug || 日志文件过大(Log File Oversize):LogFileOverflow, ExcessiveLoggingError

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

Java:Arrays类、Lambda表达式、JDK新特性(方法引用) --黑马笔记

一、Arrays类 1.1 Arrays基本使用 Arrays是操作数组的工具类&#xff0c;它可以很方便的对数组中的元素进行遍历、拷贝、排序等操作。 下面我们用代码来演示一下&#xff1a;遍历、拷贝、排序等操作。需要用到的方法如下&#xff1a; public class ArraysTest1 {public stat…

【机器学习】数据清洗之识别异常点

&#x1f388;个人主页&#xff1a;甜美的江 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;机器学习 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进步…

IDEA中Git的使用小技巧-Toolbar(工具栏)的设置

目录 1 前言 2 步骤 2.1 打开设置 2.2 找到Menus and Toolbars 2.3 Menus and Toolbars界面的介绍 2.4 选择工具 2.5 查看 1 前言 工具栏的合理运用&#xff0c;能够极大程度上为我们省时省力 &#xff0c;接下来我将以Git工具的添加&#xff0c;介绍如何定制我们IDEA…

C++学习笔记 | 基于Qt框架开发实时成绩显示排序系统1

目标&#xff1a;旨在开发一个用户友好的软件工具&#xff0c;用于协助用户基于输入对象的成绩数据进行排序。该工具的特色在于&#xff0c;新输入的数据将以红色高亮显示&#xff0c;从而直观地展现出排序过程中数据变化的每一个步骤。 结果展示&#xff1a; 本程序是一个基于…

游戏服务器哪家强?国内几款主流云服务器测评

游戏服务器租用多少钱一年&#xff1f;1个月游戏服务器费用多少&#xff1f;阿里云游戏服务器26元1个月、腾讯云游戏服务器32元&#xff0c;华为云26元&#xff0c;游戏服务器配置从4核16G、4核32G、8核32G、16核64G等配置可选&#xff0c;游戏专业服务器公网带宽10M、12M、15M…

决策树之scikit-learn

实例 from sklearn.datasets import load_iris from sklearn import tree import matplotlib.pyplot as plt# Load iris dataset iris load_iris() X, y iris.data, iris.target# Fit the classifier clf tree.DecisionTreeClassifier() clf clf.fit(X, y)# Plot the deci…