当前位置: 首页 > backend >正文

【Linux】调试工具gdb的认识和使用指令介绍(图文详解)

目录

1、debug和release的知识

2、gdb的使用和常用指令介绍:

(1)、windows下调试的功能:

(2)、进入和退出:

(3)、调试过程中的相关指令:

3、调试究竟是在干什么?


 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家

点击跳转到网站

1、debug和release的知识

(1)、debug形成的可执行程序会给我们加上调试信息,这部分调试信息也会占用空间,但我们用户是不需要这些调试信息的,用户需要更快的下载和安装,所以debug模式一般是方便开发人员进行调试,而用户得到的应该是release版本。

(2)、release形成的可执行程序不会给我们调试信息,占用内存较小,所以也是测试人员和用户得到的版本。

(3)、gcc/g++编译时默认是release模式,所以直接编译来的文件是不能用于调试的。

gcc的默认行为:

(1)默认是动态链接的

(2)默认是release模式发布的

(4)、如何让gdb以debug模式发布?

在编译的时候,使用 -g 命令:

然后使用make,生成可执行文件mybin后,使用指令:

 gdb mybin

这样就进入了调试模式。如果不加-g选项,生成的可执行文件是release模式,是进不去调试模式的。

(5)、我们分别在debug和release模式下生成可执行文件,发现如下:

会发现debug模式下的可执行文件的文件大小会比release模式下的要大,大的那部分就是增加的调试信息。

2、gdb的使用和常用指令介绍:

(1)、windows下调试的功能:

1、运行起来才能调试;

2、调试的时候需要看到代码;

3、打断点功能;

4、可以局部调试;

5、可以看到相关局部变了的内容和地址;

6、可以查看调用堆栈

7、逐语句和逐过程调试;

linux所做的就是需要平替windows里面的功能

(2)、进入和退出:

1、进入:输入指令gdb或者gdb+可执行文件名,即可进入调试功能;

gdb mybin-2

2、退出:输入指令 quit

quit

(3)、调试过程中的相关指令:

(1)、l +行号:显示指定行号之后的代码:

注意:gdb会自动记录最近的一条指令,所以上次输入指令后,直接回车可以继续执行:

(2)、b+行号/函数名/file:行号 :对指定位置打断点:

(3)、info  b :查看我们所打的断点:

(4)、d+断点编号:删除该断点。

注意,这里的断点编号是我们使用info b指令后,显示的内容的Num列: 

(5)、disable/enable + 断点编号:禁用 / 开启 该断点;

(6)、n:逐过程调试(相当于F10)

(7)、s:逐语句调试(相当于F11)

(8)、run + [参数]:开始调试,若没有断点,则全部运行完,若有断点,则运行到断点处,然后就可以进行逐语句和逐过程调试。

若该程序是需要参数输入的,此时就可以在run后面增加参数,如 run 9,则是把参数9输入到程序。

(9)、p:显示变量的内容和地址:

(10)、display 变量名/取地址变量:每调试一步,自动显示改变量的内容/地址:

(11)、undisplay + 编号:取消第(10)步:

注意,这里的编号是显示列表中的编号:

(12)、c:从一个断点运行到下一个断点(范围查找)

(13)、finish:将一个函数运行结束,然后停下来(范围查找一个函数)

(14)、until:在一个范围内,直接运行到指定行(范围查找)

(15)、bt:查看调用堆栈

(16)、set var name=value:修改name变量的值,进行分支(如if判断)测试,不会改变实际变量的值。

3、调试究竟是在干什么?

首先要知道,想调试一个程序,首先需要搞懂它的代码逻辑,不然是很困难的;

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

(2)、解决问题(配合上下文代码);

http://www.xdnf.cn/news/897.html

相关文章:

  • 深入解析 Linux 文件系统中的软硬链接:从原理到实践
  • CF2096F Wonderful Impostors
  • QT:Qt5 串口模块 (QSerialPort) 在 VS2015 中正确关闭串口避免被占用
  • (14)VTK C++开发示例 --- 将点投影到平面上
  • C++ vector 核心功能解析与实现
  • Spring-AOP分析
  • Uniapp:view容器(容器布局)
  • IDEA内存配置失效(已解决)
  • unity3d实现物体闪烁
  • unity之协程
  • [Python] 入门核心笔记
  • 超大文件处理——大文件断点续传源码-下载大文件卡死服务器—星辰大文化术——未来之窗超算中心
  • 徐州服务器租用:虚拟主机的应用场景
  • UML 状态图:陪伴机器人系统示例
  • 【图问答】DeepSeek-VL 论文阅读笔记
  • 可编辑23页PPT | 数据中台建设四步方法论:“采、存、通、用”
  • AI之pdf解析:Tesseract、PaddleOCR、RapidPaddle(可能为 RapidOCR)和 plumberpdf 的对比分析及使用建议
  • WPF的发展历程
  • Go语言中的Context
  • Java中如何创建操作线程
  • Cad c# 射线法判断点在多边形内外
  • JVM内存模型与垃圾回收
  • 蚂蚁全媒体总编刘鑫炜再添新职,出任共工新闻社新媒体研究院院长
  • 《FDTD Solutions仿真全面教程:超构表面与光束操控的前沿探索》
  • vue项目通过GetCapabilities获取wms服务元数据信息并在openlayers进行叠加显示
  • prometheus-operator部署服务监控其他节点mysql服务
  • 重构・协同・共生:传统代理渠道数字化融合全链路解决方案
  • 如何远程访问家中服务器-FRP内网穿透详细
  • 获取电脑信息(登录电脑的进程、C盘文件信息、浏览器信息、IP)
  • Windows网络及服务:制作系统盘