【Linux】GDB调试器学起来!指令全解,建议收藏

在这里插入图片描述

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤
📃个人主页 :阿然成长日记 👈点击可跳转
📆 个人专栏: 🔹数据结构与算法🔹C语言进阶🔹C++🔹Liunx
🚩 不能则学,不知则问,耻于问人,决无长进
🍭 🍯 🍎 🍏 🍊 🍋 🍒 🍇 🍉 🍓 🍑 🍈 🍌 🍐 🍍

文章目录

  • 一、GDB引入
  • 二、gdb指令大全汇总
  • 三、make/makefile知识回顾
  • 四、指令演示
    • 1.进入gdb
    • 问题排查
    • 2.行号显示
    • 3.断点设置
    • 4.查看断点信息
    • 5.删除断点
    • 6. 运行 / 调试
    • 7.逐过程和逐语句
    • 8.跟踪打印
    • 9.查看函数调用
    • 10.指定行号跳转
    • 11.强制执行函数
    • 13.跳转到下一断点

一、GDB引入

我们在vs2019中进行调试,可以使用基本调试键F5、F9、F10、F11等对代码进行调试,它是一种可视化的操作,使用起来很方便易懂。但是在linux中,,想对一段代码去进行调试呢,此时就要使用到Linux下的调试器gdb。

二、gdb指令大全汇总

l(list) 行号/函数名显示对应的code,每次10行
r(run)F5【无断点直接运行、有断点从第一个断点处开始运行】
b(breakpoint) + 行号在那一行打断点
b 源文件:函数名在该函数的第一行打上断点
b 源文件:行号在该源文件中的这行加上一个断点吧
info b查看断点的信息breakpoint already hit 1 time【此断点被命中一次】
d(delete) + 当前要删除断点的编号删除一个断点【不可以d + 行号】若当前没有跳出过gdb,则断点的编号会持续累加
d + breakpoints删除所有的断点
disable b(breakpoints)使所有断点无效【默认缺省】
enable b(breakpoints)使所有断点有效【默认缺省】
disable b(breakpoint) + 编号使一个断点无效【禁用断点】
enable b(breakpoint) + 编号使一个断点有效【开启断点】相当于VS中的空断点
enable breakpount使一个断点有效【开启断电】
n(next)逐过程【相当于F10,为了查找是哪个函数出错了】
s(step)逐语句【相当于F11,】
bt看到底层函数调用的过程【函数压栈】
set var修改变量的值
p(print) 变量名打印变量值
display跟踪查看一个变量,每次停下来都显示它的值【变量/结构体…】
undisplay + 变量名编号取消对先前设置的那些变量的跟踪
排查问题三剑客如下
until + 行号进行指定位置跳转,执行完区间代码
finish在一个函数内部,执行到当前函数返回,然后停下来等待命令
c(continue)从一个断点处,直接运行至下一个断点处【VS下不断按F5】

三、make/makefile知识回顾

为了更好的演示指令,我们需要先创建一个test.c文件,以供调试。
使用vim编辑如下代码。

  1 #include<stdio.h>2 3 int Sum(int n)                                                                                                                               4 {5   int i=1;6   int sum =0;7   for(;i<=n;i++)8   {9     sum+=i;10   }11   return sum;12 }13 14 int main()15 {16   printf("hello world\n");17   int result = Sum(100);18   printf("result = %d\n",result);19   return 0;20 }
~

并创建Makefile文件配置。
在这里插入图片描述
make一下,发现成功打印出来结果。
在这里插入图片描述

四、指令演示

1.进入gdb

使用格式:

gdb 可执行程序

前提是在【Debug】环境下运行。

在这里插入图片描述

问题排查

出现下面问题,通常是没有处于调式模式环境下,所以我们需要在gcc指令后加 【-g】。
因为,我么的gcc编辑器默认是动态链接,而且是realese发布版本。

在这里插入图片描述

在这里插入图片描述

2.行号显示

l(list) 行号/函数名 —— 显示对应的code,每次10行

  • 单单使用【l】,随机显示10行
    在这里插入图片描述
  • 【l+数字】,从该数字开始打印10行
    在这里插入图片描述
  • 【enter】继续打印10行
    在这里插入图片描述

3.断点设置

b + 行号在那一行打断点
b 源文件:函数名在该函数的第一行打上断点
b 源文件:行号在该源文件中的这行加上一个断点

第一种:b + 行号
在这里插入图片描述
第二种:b 源文件:函数名
在这里插入图片描述
第三种:b 源文件:行号

在这里插入图片描述

4.查看断点信息

info】:查看所有调式信息
info b】:显示所打的断点的信息
在这里插入图片描述

对上述产看信息的字段解释:
1️⃣ Num —— 编号
2️⃣ Type —— 类型
3️⃣ Disp —— 状态
4️⃣ Enb —— 是否可用
5️⃣ Address —— 地址
6️⃣ What —— 在此文件的哪个函数的第几行

5.删除断点

d + 当前要删除断点的编号】——删除一个断点
注意:不是d + 行号,而是编号
d + breakpoints】 —— 删除所有的断点

在这里插入图片描述

6. 运行 / 调试

r(run)】 —— F5(无断点直接运行、有断点从第一个断点处开始运行)
在这里插入图片描述

  • 如果加上断点去运行的话就会在打的断点处停下来。

7.逐过程和逐语句

n(next)】 —— 逐过程(相当于F10,为了查找是哪个函数出错了)
在这里插入图片描述

s(step) 】—— 逐语句相当于F11,一次走一条代码,可进入函数,同样的库函数也会进入】
在这里插入图片描述

8.跟踪打印

display —— 跟踪查看一个变量,每次停下来都显示它的值【变量/结构体…】
在这里插入图片描述
undisplay + 变量名编号】 —— 取消对先前设置的那些变量的跟踪

9.查看函数调用

bt】 —— 看到底层函数调用的过程【函数压栈】
在这里插入图片描述

10.指定行号跳转

until + 行号】 —— 进行指定位置跳转,执行完区间代码

11.强制执行函数

finish —— 在一个函数内部,执行到当前函数返回,然后停下来等待命令

13.跳转到下一断点

c —— 从一个断点处,直接运行至下一个断点处【VS下不断按F5】

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

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

相关文章

面试十五 容器

一、vector容器 template<typename T> class Allocator{ public:T* allocator(size_t size){// 负责内存开辟return (T*)malloc(sizeof(T) * size);}void deallocate(void * p){free(p);}void construct(T*p,const T&val){// 定位newnew (p) T(val);}void destroy(…

访问控制列表配置实验

ACL&#xff0c;全称 Access Control List&#xff08;访问控制列表&#xff09;&#xff0c;是一种实现访问控制的机制&#xff0c;用于规定哪些主体&#xff08;如用户、设备、IP地址、进程等&#xff09;可以对哪些资源&#xff08;如网络服务、文件、系统对象等&#xff09…

2024深圳杯C题的8页思路分析+所有代码可执行+参考文献+持续更新参考论文(已经更新了代码与图像)

比赛题目的完整版思路可执行代码数据参考论文都会在第一时间更新上传的&#xff0c;大家可以参考我往期的资料&#xff0c;所有的资料数据以及到最后更新的参考论文都是一次付费后续免费的。注意&#xff1a;&#xff08;建议先下单占坑&#xff0c;因为随着后续我们更新资料数…

docker入门学习

一、docker概念 Docker 引擎是使用的是Linux内核特性的容器引擎。 二、docker的安装 1.docker&#xff0c;下载地址&#xff1a; 桌面版&#xff1a;Docker Desktop: The #1 Containerization Tool for Developers | Docker 服务器版&#xff1a;Install Docker Engine | D…

# 从浅入深 学习 SpringCloud 微服务架构(六)Feign(3)

从浅入深 学习 SpringCloud 微服务架构&#xff08;六&#xff09;Feign&#xff08;3&#xff09; 一、组件的使用方式总结 1、注册中心 1&#xff09; Eureka 搭建注册中心 引入依赖 spring-cloud-starter-netflix-eureka-server。 配置 EurekaServer。 通过 EnableEure…

前端路由的实现原理

当谈到前端路由时&#xff0c;指的是在前端应用中管理页面导航和URL的机制。前端路由使得单页应用&#xff08;Single-Page Application&#xff0c;SPA&#xff09;能够在用户与应用交互时动态地加载不同的视图&#xff0c;而无需每次都重新加载整个页面。 在前端开发中&…

如何在阿里云快速配置自动定时重启ECS云服务器?

背景 无论是电子商务、在线教育、游戏&#xff0c;还是流媒体等业务&#xff0c;服务器的稳定运行都是至关重要的。然而&#xff0c;在实际运行中&#xff0c;我们可能会遇到这样一些场景&#xff1a; 系统更新&#xff1a;一些操作系统或者软件的更新可能需要重启服务器才能…

bit、进制、位、时钟(窗口)、OSI七层网络模型、协议、各种码

1.bit与进制 &#xff08;个人理解&#xff0c;具体电路是非常复杂的&#xff09; 物理层数据流&#xff0c;bit表示物理层数据传输单位&#xff0c; 一个电路当中&#xff0c;通过通断来表示数字1和0 两个电路要通讯&#xff0c;至少要两根线&#xff0c;一根作为电势参照…

Java中使用Graphics2D绘制字符串文本自动换行 算法

效果&#xff1a; 代码&#xff1a; /*** return void* Author xia* Description //TODO 写字换行算法* Date 18:08 2021/4/1* Param []**/private static void drawWordAndLineFeed(Graphics2D g2d, Font font, String words, int wordsX, int wordsY, int wordsWidth) {FontD…

东北大学工程训练CNC加工中心(坤图)

东北大学加工中心&#xff08;CNC&#xff09;采用的系统为FANUC系统。 要求学生自主设计图样&#xff0c;编写GCODE文件&#xff0c;操作电脑使机床按设计路径铣出图案。 本人设计的图样为坤坤图 图为用CAD设计绘制的图样。 计算坐标&#xff0c;设计铣刀轨迹&#xff0c;得…

Linux--基础IO(上)

目录 1. 文件的边角知识 1.1 文件是什么&#xff1f; 1.2 文件是怎么打开的&#xff1f; 1.3 进程与文件 进程与文件的关系 2. 重温c语言文件接口 2.1 打开文件的方式 2.2 读写文件接口的重温 2.2.1 写文件 2.2.2 读文件 3. 系统文件I/O 3.1 系统接口 3.2 系…

【深度学习-第5篇】使用Python快速实现CNN分类(模式识别)任务,含一维、二维、三维数据演示案例(使用pytorch框架)

在之前的文章中介绍了CNN的图解入门&#xff0c;CNN的MATLAB分类实现&#xff0c;CNN的MATLAB回归实现。 卷积神经网络(Convolutional Neural Networ&#xff0c;简称CNN)是一种广泛应用于图像识别领域的深度学习算法。它通过模拟人类视觉系统的层次结构&#xff0c;可以自动提…

nginx-1.24.0 安装教程

下载nginx安装包 mkdir -p /home/app cd /home/app wget http://nginx.org/download/nginx-1.24.0.tar.gz 解压缩 tar -zxf nginx-1.24.0.tar.gz 下载nginx二进制包编译所需的工具和依赖 yum install gcc-c pcre pcre-devel zlib zlib-devel openssl openssl-devel -y 编译…

Arduino平衡小车

一&#xff0c;TB6612FNG电机驱动芯片 TB6612FNG是东芝半导体公司生产的一款直流电机驱动器件&#xff0c;它具有大电流MOSFET-H桥结构&#xff0c;双通道电路输出&#xff0c;可同时驱动2个电机. 参数名称参数值电压范围2.7-5.5V最大输入电压15V输出电流1.2A(平均)/3.2A&…

Vitis HLS 学习笔记--HLS入门示例集合-目录

目录 1. 示例集合概述 2. Interface 接口 2.1 Aggregation_Disaggregation 聚合与解聚 2.1.1 aggregation_of_m_axi_ports 2.1.2 aggregation_of_nested_structs 2.1.3 aggregation_of_struct 2.1.4 auto_disaggregation_of_struct 2.1.5 disaggregation_of_axis_port …

模块化 手写实现webpack

模块化 common.js 的导入导出方法&#xff1a; require \ export 和 module.exports export 和 module.export nodejs 内存1.4G -> 2.8G cjs ESModule 主要区别&#xff1a; require属于动态类型&#xff1a;加载执行 同步 esmodul是静态类型&#xff1a;引入时并不会真的去…

Autosar AP的基本构成

1. 引言 Autosar AP的体系结构是怎样的呢&#xff1f;从整体的宏观的方向上划分&#xff0c;分为 1&#xff09;应用层&#xff0c;其中放置各种应用组件SWCs。2&#xff09;运行时基本功能软件族群&#xff0c;提供基本AutoSar基本软件中间件&#xff0c;比如经典的通信服务…

【漏洞复现】云时空社会化商业ERP系统slogin SQL注入漏洞

漏洞描述&#xff1a; 云时空社会化商业ERP系统slogin存在SQL注入漏洞&#xff0c;攻击者可以通过此漏洞获取数据库敏感信息。 搜索语法: Fofa-Query: app"云时空社会化商业ERP系统" 漏洞详情&#xff1a; 1.云时空社会化商业ERP系统。 2.漏洞POC&#xff1a; …

智慧园区引领未来产业趋势:科技创新驱动园区发展,构建智慧化产业新体系

目录 一、引言 二、智慧园区引领未来产业趋势 1、产业集聚与协同发展 2、智能化生产与服务 3、绿色可持续发展 三、科技创新驱动园区发展 1、创新资源的集聚与整合 2、创新成果的转化与应用 3、创新文化的培育与弘扬 四、构建智慧化产业新体系 1、优化产业布局与结构…

JavaScript:将input标签中的内容打印到控制台

使用浏览器进行开发时&#xff0c;按F12可以查看网页信息。 目标&#xff1a;实现将input标签中的内容&#xff0c;打印到控制台&#xff08;console&#xff09; HTML页面的关键代码实现&#xff1a; 登录功能&#xff1a; HTML代码&#xff1a; <div class"form-…