【Linux】开始使用gdb吧!

news2024/10/23 19:28:10

在这里插入图片描述

开始使用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♪(・ω・)ノ谢谢阅读!!!

下一篇文章见!!!

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

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

相关文章

【力扣白嫖日记】1070.产品销售分析III

前言 练习sql语句&#xff0c;所有题目来自于力扣&#xff08;https://leetcode.cn/problemset/database/&#xff09;的免费数据库练习题。 今日题目&#xff1a; 1070.产品销售分析III 表&#xff1a;Sales 列名类型sale_idintproduct_idintyearintquantityintpriceint …

01背包问题 刷题笔记

思路 dp 用f[i][j]来表示当体积为j时 考虑前i件物品可以获得的 最大值 记住f[i][j]本身是个价“价值” 考虑两种状态 是否将第i件物品放入背包里面 将背包的体积从小到大递增来进行考虑 首先 考虑条件 如果当前增加的体积放不下下一件物品 则该体积 可以获得的最大值可以直接…

Easticsearch性能优化之索引优化

Easticsearch性能优化之索引优化 一、合理的索引设计二、合理的分片和副本三、合理的索引设置 对于性能优化&#xff0c;Elasticsearch&#xff08;以下简称ES&#xff09;的索引优化是提高性能的关键因素之一。合理的设计索引&#xff0c;合理的分片和副本以及合理的缓存设置等…

Truenas入门级教程

Truenas入门教程 前言&#xff1a;系统相关配置 采用I3 4160&#xff0c;采用了2块500G的硬盘&#xff0c;内存为8G&#xff0c;两个网卡只用了其中一个&#xff0c;系统安装的是core版本 硬件采用DELL3020MT机箱&#xff0c;自带3个SATA网口&#xff0c;后期网口不够&#…

七.AV Foundation 视频播放 - 图片进度条

引言 播放器的功能功能已经十分完善了&#xff0c;接下来我们给它添加一些提升用户体验的功能。当前市面上的主流播放器几乎都有一个非常友善的功能&#xff0c;用户在退拽进度条的时候可以看见进度条所处进度的视频画面&#xff0c;这对于用户来说是一种直观而且便捷的体验。…

今天分享一个好看的输入法皮肤相信每个人心里住着一个少女心我们美化一下她吧

标题&#xff1a; 白日梦皮肤上线&#xff0c;百度输入法助你开启梦幻之旅&#xff01; 正文&#xff1a; 大家好呀&#xff01;今天我来给大家安利一款超级梦幻的百度输入法皮肤——“白日梦”系列&#xff01; 这款皮肤的设计灵感来源于我们内心深处的白日梦&#xff0c;充…

【Python】新手入门(9):数值和序列

&#x1f40d;【Python】新手入门&#xff08;9&#xff09;&#xff1a;数值和序列 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&am…

MySQL为什么要用B+树?

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

重装系统后正版office如何安装

前言 重装系统后&#xff0c;正版office如何安装 登录官网 https://www.microsoft.com 下载office https://account.microsoft.com/services

KOA优化最近邻分类预测(matlab代码)

KOA-最近邻分类预测matlab代码 开普勒优化算法&#xff08;Kepler Optimization Algorithm&#xff0c;KOA&#xff09;是一种元启发式算法&#xff0c;灵感来源于开普勒的行星运动规律。该算法模拟行星在不同时间的位置和速度&#xff0c;每个行星代表一个候选解&#xff0c;…

STM32标准库——(19)PWR电源控制

1.PWR简介 PWR属于外设部分 调用时需要先开启时钟 2.电源框图 这个图可以分为三个部分&#xff0c;最上面是模拟部分供电叫做VDDA&#xff0c;中间是数字部分供电&#xff0c;包括两块区域&#xff0c;VDD供电区域和1.8v供电区域&#xff0c;下面是后备供电&#xff0c;叫做VB…

python中的文件操作2

文件遍历 在Python中&#xff0c;遍历文件通常指的是逐行读取文件中的内容。这种方式对于处理大型文件特别有用&#xff0c;因为它不需要一次性将整个文件加载到内存中。下面是几种常见的遍历文件内容的方法&#xff1a; 1. 使用with语句和for循环 这是最推荐的方式&#xf…

模拟实现std::string类(包含完整、分文件程序)

std库中的string是一个类&#xff0c;对string的模拟实现&#xff0c;既可以复习类的特性&#xff0c;也可以加深对std::string的理解。 &#x1f308;一、搭建框架 ☀️1.新命名空间 本质上string是一个储存在库std里面的类&#xff0c;现在需要模拟实现一个string类&#…

MySQl基础入门④

上一遍知识内容 1.使用语句方式选择与查看数据库 打开我们navicat软件之后。 先不要点左边的连接内容&#xff0c;而是直接点击工具&#xff0c;再点击命令界面&#xff0c;也可以直接快捷键F6启动。 在我们的命令窗口输入以下命令&#xff1a; USE dataname;按回车。 这个语…

片上网络(NoC)技术的发展及其给高端FPGA带来的优势

片上网络(NoC)技术的发展及其给高端FPGA带来的优势 1. 概述 在摩尔定律的推动下,集成电路工艺取得了高速发展,单位面积上的晶体管数量不断增加。 片上系统(System-on-Chip,SoC)具有集成度高、功耗低、成本低等优势,已经成为大规模集成电路系统设计的主流方向,解决了…

RHEL9实现系统间复制文件

以下环境使用的是RHEL9学员练习环境 文件传送至远端 - sftp sftp是一个文件传输程序&#xff0c;类似于ftp目标可以指定为[user]host[:path]或URL格式为sftp://[user]host[:port][/path]sftp和ftp都是FTP协议的客户端工具&#xff0c;工作模式和使用方式均相同&#xff0c;但是…

Linux文件描述符剖析

文章目录 文件描述符文件描述符分配规则重定向软硬链接软链接&#xff08;Symbolic Link&#xff09;&#xff1a;硬链接&#xff08;Hard Link&#xff09;&#xff1a; 文件描述符 文件描述符&#xff08;File Descriptor&#xff09;是一个非负整数&#xff0c;用于标识打开…

【电路笔记】-NPN晶体管

NPN晶体管 文章目录 NPN晶体管1、概述2、双极NPN晶体管配置3、NPN晶体管中的α和β关系4、示例5、共发射极配置1、概述 NPN 晶体管是三端三层器件,可用作放大器或电子开关。 在前面的文章中,我们看到标准双极晶体管或 BJT 有两种基本形式。 NPN(负-正-负)配置和PNP(正-负…

腾讯云服务器和阿里云服务器哪家更优惠?2024价格对比

2024年阿里云服务器和腾讯云服务器价格战已经打响&#xff0c;阿里云服务器优惠61元一年起&#xff0c;腾讯云服务器61元一年&#xff0c;2核2G3M、2核4G、4核8G、4核16G、8核16G、16核32G、16核64G等配置价格对比&#xff0c;阿腾云atengyun.com整理阿里云和腾讯云服务器详细配…

好物周刊#44:现代终端工具

https://github.com/cunyu1943 村雨遥的好物周刊&#xff0c;记录每周看到的有价值的信息&#xff0c;主要针对计算机领域&#xff0c;每周五发布。 一、项目 1. Github-Hosts 通过修改 Hosts 解决国内 Github 经常抽风访问不到&#xff0c;每日更新。 2. 餐饮点餐商城 针对…