【Linux】开始使用gdb吧!

在这里插入图片描述

开始使用gdb吧!

  • 1 下载安装
  • 2 开始使用
  • 3 实践运用
  • 补充一下 print 的 功能 (类似监视窗口的作用)和显示堆栈的功能
  • Thanks♪(・ω・)ノ谢谢阅读!!!
  • 下一篇文章见!!!

这篇文章我们来学习 gdb 的使用方法。我们在Windows端编写代码时有宇宙最强编译器VS2022帮助我们调试,那Linux端有没有一款强大的调试工具呢???
当然有了 它就是 gdb :
Linux下的gdb(GNU Debugger)是一款强大的调试工具,对于程序员来说,掌握gdb的使用技巧是开发过程中必不可少的技能。根据Statista的数据,截至2023,Linux在全球服务器操作系统市场占据近37%的份额,这使得gdb成为了许多专业人士必备的工具。
本文将介绍如何使用gdb。

1 下载安装

首先我们要确保已经安装gdb,可以通过 gdb -version来进行间接查看。
未安装使用sudo yum -y install gdb 下载安装即可。
在这里插入图片描述

2 开始使用

首先进入gdb直接使用:gdb 文件名
接下来我直接给出 gdb 的 所有功能命令(注意简写形式,会经常使用):

  1. list /l 行号:显示指定行号附近的源代码,每次显示10行,从当前光标位置向下滚动
  2. list /l 函数名:显示指定函数的完整源代码
  3. r 或 run:开始执行程序
  4. n 或 next:执行下一条语句,不会进入函数内部相当于 F10
  5. s 或 step:执行下一条语句,如果下一条语句是函数调用,则进入该函数内部相当于 F11
  6. break(b) 行号:在指定的行号设置断点。相当于 F9
  7. break 函数名:在指定函数的开头设置断点。
  8. info break:显示所有断点的信息
  9. finish:执行当前函数的剩余部分,直到函数返回,然后暂停程序。
  10. print ( p ) 表达式:计算并打印表达式的值。
  11. p 变量:打印变量的值
  12. set var:修改变量的值
  13. continue(或c):继续执行程序,直到下一个断点或程序结束相当于 F5
  14. run(或r):从程序的开始处执行程序,直到程序结束或遇到断点。

断点相关操作

  1. delete breakpoints:删除所有断点。
  2. delete breakpoints n:删除指定编号的断点。
  3. disable breakpoints:禁用所有断点。
  4. enable breakpoints:启用所有断点。
  5. ignore:忽略特定的断点。例如,ignore 1 main 会让断点1在主函数上失效
  6. info(或i) breakpoints:显示当前设置的所有断点。

监视相关操作

  1. display 变量名:跟踪指定变量的值,并在每次程序暂停时显示它。

  2. undisplay:取消对先前设置的变量的跟踪。

  3. until X行号:继续执行程序,直到达到指定的行号。

  4. breaktrace(或bt):显示程序的调用栈,包括所有函数的调用和参数。

  5. info(i) locals:显示当前函数栈帧中局部变量的值。

  6. quit:退出GDB。

3 实践运用

接下来我们在实践中加深对gdb的熟悉:
首先我们编写一段简单程序:

 1 #include<iostream>
    2 using namespace std;
    3 
    4 int main(){
    5   int i = 0;
    6   int j = 100;
    7 
    8   while(i < 100){
    9     int sum = i + j;
   10     i++;
   11     j -= 2;
   12   }
   13                                                                                                                                                                             
   14   for(int k = 0;k<10;k++){
   15     cout<<"hello bit"<<endl;
   16   }
   17 
   18 
   19   return 0;
   20 }

然后我们直接进入gdb
在这里插入图片描述
出乎意料的是 再使用list出现了报错(No symbol table is loaded. Use the “file” command.)!!!

这是因为 gdb操作的应该是编译后的文件
当编译时,未加 - g 选项,则进入gdb环境中执行命令会出现No symbol table is loaded. Use the “file” command.提示;
一定要进行gcc/g++ -g test.c -o test操作哦。
在这里插入图片描述
这样就好了:成功显示出我们代码
在这里插入图片描述
接下来我们打开监视,来看看每个变量的变化。我们先打上断点来进入主函数:
在这里插入图片描述在这里插入图片描述
然后逐个 display 展示即可:
在这里插入图片描述
然后调试(continue、step、next)就好,可以清楚看到每个变量的值
在这里插入图片描述
我们来试试断点的快速移动:
在这里插入图片描述
我们直接就跳出了正在进行的while循环,来到14行了。
其他指令就不进行探索了,熟悉使用就可以了。

补充一下 print 的 功能 (类似监视窗口的作用)和显示堆栈的功能

  1. print 表达式:简记为 p ,其中“表达式”可以是任何当前正在被测试程序的有效表达式,比如当前正在调试C语言的程序,那么“表达式”可以是任何C语言的有效表达式,包括数字,变量甚至是函数调用。
  2. print a:将显示整数 a 的值
  3. print ++a:将把 a 中的值加1,并显示出来
  4. print name:将显示字符串 name 的值
  5. print gdb_test(22):将以整数22作为参数调用 gdb_test() 函数
  6. print gdb_test(a):将以变量 a 作为参数调用 gdb_test() 函数
  7. watch 表达式:设置一个监视点,一旦被监视的“表达式”的值改变,gdb将强行终止正在被调试的程序。如: watch a
  8. whatis :查询变量或函数
  9. info function: 查询函数,扩展info locals: 显示当前堆栈页的所有变量

堆栈:

  1. where/bt :当前运行的堆栈列表;
  2. bt backtrace 显示当前调用堆栈
  3. up/down 改变堆栈显示的深度
  4. set args 参数:指定运行时的参数
  5. show args:查看设置好的参数
  6. info program: 来查看程序的是否在运行,进程号,被暂停的原因。

Thanks♪(・ω・)ノ谢谢阅读!!!

下一篇文章见!!!

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

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

相关文章

JavaScript基础4之原型的原型继承、原型链和理解对象的数据属性、访问器属性

JavaScript基础 原型原型继承问题解决 原型链isPrototypeOf()Object.getPrototypeOf() 理解对象数据属性访问器属性 原型 原型继承 继承是面向对象编程的另一个特征&#xff0c;通过继承进一步提升代码封装的程度&#xff0c;JavaScript中大多是借助原型对象实现继承的特性。…

计算机基础专升本笔记十四-计算机网络基础(一)

计算机基础专升本笔记十四-计算机网络基础&#xff08;一&#xff09; 一、计算机网络的发展历程 第一代计算机网络&#xff08;数据通信&#xff09; 以数据通信为主的第一代计算机网络。主要是指美国军方用于防控系统的一种联机系统。它只是计算机网络的雏形。 第二代计算…

2022年浙江省职业院校技能大赛信息安全管理与评估 理论题答案

培训、环境、资料 公众号&#xff1a;Geek极安云科 网络安全群&#xff1a;775454947极安云科专注于技能提升&#xff0c;赋能 2024年广东省高校的技能提升&#xff0c;在培训中我们的应急响应环境 成功押题成功&#xff0c;知识点、考点、内容完美还原大赛赛题环境&#xff0c…

比肩Gen-2,全新开源文生视频模型

著名开源平台Stability.ai在官网宣布&#xff0c;推出全新文生视频的扩散模型Stable Video Diffusion&#xff0c;已开源了该项目并公布了论文。 据悉&#xff0c;用户通过文本或图像就能生成高精准&#xff0c;14帧和25帧的短视频。目前&#xff0c;Stable Video Diffusion处…

Vue+SpringBoot打造校园电商物流云平台

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 商品数据模块2.3 快递公司模块2.4 物流订单模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 商品表3.2.2 快递公司表3.2.3 物流订单表 四、系统展示五、核心代码5.1 查询商品5.2 查询快递公司5.3 查…

基于YOLOv5的驾驶员疲劳驾驶行为​​​​​​​检测系统

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文主要内容:详细介绍了疲劳驾驶行为检测整个过程&#xff0c;从数据集到训练模型到结果可视化分析。 博主简介 AI小怪兽&#xff0c;YOLO骨灰级玩家&#xff0c;1&#xff09;YOLOv5、v7、v8优化创新&#xff0c;轻松涨点和模型轻量…

一次简单操作代替所有异常处理

一、背景 在服务端处理前端发过来的响应的时候&#xff0c;开发者不可能穷尽用户的所有奇怪的操作。除此之外&#xff0c;我们还需要应付前端人员对我们的无情吐槽&#xff0c;你对XXXX请求返回的为啥是奇怪的响应数据呢&#xff1f;于是全局异常处理应运而生&#xff0c;一次处…

高级控件

1.下拉列表 package com.tiger.chapter08;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Spinner;public class Spi…

tomcat搭建个人博客 实现动静分离

jar包相关 .war&#xff1a;WebApp打包,类zip格式文件,通常包括一个应用的所有资源,比如jsp,html,配置文件等 .jar&#xff1a;EJB类文件的打包压缩类zip格式文件&#xff0c;,包括很多的class文件, 网景公司发明 .rar&#xff1a;资源适配器类打包文件&#xff0c;目前已不常…

Pytorch学习 day06(torchvision中的datasets、dataloader)

torchvision的datasets 使用torchvision提供的数据集API&#xff0c;比较方便&#xff0c;如果在pycharm中下载很慢&#xff0c;可以URL链接到迅雷中进行下载&#xff08;有些URL链接在源码里&#xff09;代码如下&#xff1a; import torchvision # 导入 torchvision 库 # …

RISC-V架构学习资料整理

1、韦东山——D1S哪吒开发板的裸机代码仓库 https://github.com/bigmagic123/d1-nezha-baremeta 2、melis系统移植到D1S https://blog.51cto.com/u_13800193/6268813 3、韦东山的gitee仓库 https://gitee.com/weidongshan 4、D1S编译工具链下载 https://github.com/Tina-Linux/…

第18课:让客户看了就满意的商业软文是如何练成的?

选品上的注意事项 结合影视热点 通过追影视热点&#xff0c;找出能够跟产品贴合的点。在前面先道出痛点&#xff0c;痛点越深刻&#xff0c;用户对产品的过度才会更自然。 用户体验 真实体验才能真正写得出来。 结合时事热点 用的少&#xff0c;赶上了用就会效果很好&#xf…

2024内衣洗衣机测评推荐:希亦、小吉、鲸立综合对比哪个牌子好?

对于那些追求品质生活、分类洗涤的用户而言&#xff0c;小型洗衣机可以满足我们对不同类型衣物分开洗涤的需求&#xff0c;例如将内衣、袜子等小件衣物与外套等分开洗涤&#xff0c;以保持衣物的清洁和卫生。并且如果您家中有宝宝&#xff0c;或者您对个人卫生和健康有较高要求…

Latex公式太长换行标号

Latex中公式太长换行,且编号,可以采用align,不编号行公式用\nonumber,示例如下: \begin{align}\nonumber %第1行公式不编号&a+b+a+b+a+b+a+b+a+b+a+b+a+b+a\\&+c+d=m %第2行公式编号 \end{align}效果如下 原文件链接 公式不同命令的区别 \begin{align} 与 \…

火柴排队(逆序对 + 离散化)

505. 火柴排队 原题链接 思路 如下是画图分析的一些过程 在这里贪心的思路是排序&#xff0c;然后两个数组都是从小到大那样对应的话最终的答案可达到最小 而我们只能交换相邻的火柴&#xff0c;故在这里先假设一个简化版本&#xff0c;即A有序&#xff0c;而只需要对B进行…

chatgpt与人类有何不同?

ChatGPT和人类之间存在多个显著的差异。 首先&#xff0c;ChatGPT是一种基于人工智能技术的计算机程序&#xff0c;通过机器学习和自然语言处理等技术&#xff0c;从大量的数据中获取知识并生成语言输出。它主要依赖于算法和数据进行工作&#xff0c;能够迅速处理和检索信息&a…

MySQL为什么要用B+树?

二叉树&#xff08;二叉查找树&#xff09; 平衡二叉树&#xff08;B树就是B-树&#xff09;(解决了二叉查找树的极端情况&#xff09; Q&#xff1a;具体是怎么解决的呢&#xff1f; A&#xff1a; 树左右两边层数相差不大于1一旦符合条件1的时候&#xff0c;就进行左旋/右…

sql高级

sql高级 SQL SELECT TOP 子句 SELECT TOP 子句用于规定要返回的记录的数目。 SELECT TOP 子句对于拥有数千条记录的大型表来说&#xff0c;是非常有用的。 **注意:**并非所有的数据库系统都支持 SELECT TOP 语句。 MySQL 支持 LIMIT 语句来选取指定的条数数据&#xff0c; O…

掌握Linux之巅:RHCE认证快速攻略

在数字化时代&#xff0c;Linux系统已经成为企业级应用的重要支柱。RHCE&#xff08;Red Hat Certified Engineer&#xff09;认证&#xff0c;作为Linux领域的权威认证&#xff0c;不仅代表了专业技术的认可&#xff0c;更是职业发展的有力武器。本文将为你揭秘如何快速掌握Li…

信号处理--卷积残差网络实现单通道脑电的睡眠分期监测

目录 背景 亮点 环境配置 数据 方法 结果 代码获取 参考文献 背景 人类大约花三分之一的时间睡觉&#xff0c;这使得监视睡眠成为幸福感的组成部分。 在本文中&#xff0c;提出了用于端到端睡眠阶段的34层深残留的Convnet架构 亮点 使用深度1D CNN残差架构&#xff0…