【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.mzph.cn/web/76778.shtml

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

相关文章

【Pytorch 中的扩散模型】去噪扩散概率模型(DDPM)的实现

介绍 广义上讲,扩散模型是一种生成式深度学习模型,它通过学习到的去噪过程来创建数据。扩散模型有很多变体,其中最流行的通常是文本条件模型,它可以根据提示生成特定的图像。一些扩散模型(例如 Control-Net&#xff0…

Milvus(3):数据库、Collections说明

1 数据库 Milvus 在集合之上引入了数据库层,为管理和组织数据提供了更有效的方式,同时支持多租户。 1.1 什么是数据库 在 Milvus 中,数据库是组织和管理数据的逻辑单元。为了提高数据安全性并实现多租户,你可以创建多个数据库&am…

【质量管理】“武藏曲线”和“微笑曲线”的差异

什么是“微笑曲线” 在电子制造领域,“微笑曲线”(Smiling Curve)是由宏碁集团创始人施振荣于1992年提出的一个理论模型,用于描述产业链中不同环节的附加价值分布。该曲线因形状类似“微笑”而得名,核心观点是&#xf…

【html】a标签target属性以及扩展应用

进行页面新窗口打开跳转&#xff0c;我们使用 <a> 标签即可实现。 <a>标签可以通过设置target的值来控制此链接的打开方式&#xff0c;一般可取以下值&#xff1a; _self&#xff1a;默认值&#xff0c;链接在当前窗口打开 _blank&#xff1a;链接在新窗口打开 …

一文读懂什么是 MCP、A2A、ANP

在人工智能快速发展的今天&#xff0c;智能体&#xff08;Agent&#xff09;正逐步成为互联网交互的新主体。它们不仅能替代人类完成复杂任务&#xff0c;还能通过协作形成更高效的网络生态。然而&#xff0c;这一切的实现离不开通信协议的支持。本文将解析智能体领域的三大核心…

Python3网络爬虫开发--爬虫基础

网络爬虫基础 1.1 HTTP基本原理 1.1.1 URI和URL URI即统一资源标志符,URL即统一资源定位符。 有这样一个链接,http://test.com/test.txt,在这个链接中,包含了访问协议https,访问目录(即根目录),资源名称(test.txt)。通过这样的链接,可以在互联网上找到这个资源,这…

OpenCV颜色变换cvtColor

OpenCV计算机视觉开发实践&#xff1a;基于Qt C - 商品搜索 - 京东 颜色变换是imgproc模块中一个常用的功能。我们生活中看到的大多数彩色图片都是RGB类型的&#xff0c;但是在进行图像处理时需要用到灰度图、二值图、HSV&#xff08;六角锥体模型&#xff0c;这个模型中颜色的…

Hadoop----高可用搭建

目录标题 **什么是高可用&#xff1f;****⭐搭建的步骤**一.jdk**安装配置**- **要点**: 二.zookeeper**集群配置**- **要点** 三.Hadoop高可用的搭建- **要点**①环境变量的配置②配置文件的修改 ③内容分发④集群任务的初次启动 什么是高可用&#xff1f; 通过冗余设计 自动…

【Rust 精进之路之第15篇-枚举 Enum】定义、变体与数据关联:表达多种可能性

系列: Rust 精进之路:构建可靠、高效软件的底层逻辑 作者: 码觉客 发布日期: 2025年4月20日 引言:当值拥有“选项”——超越结构体的表达力 在上一篇【结构体 Struct】中,我们学习了如何使用结构体将多个相关的数据字段组合成一个有意义的整体。结构体非常适合表示那些…

模拟实现strncat、qsort、atoi

目录 前言 一、模拟实现strncat 参数 代码演示&#xff1a; 二、模拟实现qsort 参数 代码演示&#xff1a; 前言 本文主要是对strncat&#xff0c;qsort&#xff0c;atoi的模拟实现 一、模拟实现strncat C 库函数 char *strncat(char *dest, const char *src, size_t n…

Ubuntu 系统中修改 MySQL 的 sql_mode

在 Ubuntu 系统中修改 MySQL 的 sql_mode 需要编辑 MySQL 的配置文件并重启服务。以下是详细步骤&#xff1a; 步骤 1&#xff1a;定位 MySQL 配置文件 MySQL 配置文件通常位于以下路径之一&#xff08;具体取决于安装方式&#xff09;&#xff1a; /etc/mysql/my.cnf /etc/m…

进阶算法 第一课:贪心

本文遵循 CC BY-NC-ND 4.0 协议&#xff0c;作者&#xff1a; U•ェ•*U \texttt{U•ェ•*U} U•ェ•*U&#xff0c;转载请获得作者授权。 欢迎大家来到进阶算法第一课&#xff1a;贪心&#xff1b;我会分为以下几点为大家讲解贪心&#xff1a; 什么是贪心。贪心的性质与分类。…

AI领域:MCP 与 A2A 协议的关系

一、为何会出现MCP和A2A 协议是非常重要的东西&#xff0c;只有大家都遵循统一的协议&#xff0c;整体生态才好发展&#xff0c;正如有了HTML&#xff0c;互联网才快速发展&#xff0c;有了OpenAPI&#xff0c; API才会快速发展。 Agent目前是发展最快的领域&#xff0c;从最初…

深度学习训练中的显存溢出问题分析与优化:以UNet图像去噪为例

最近在训练一个基于 Tiny-UNet 的图像去噪模型时&#xff0c;我遇到了经典但棘手的错误&#xff1a; RuntimeError: CUDA out of memory。本文记录了我如何从复现、分析&#xff0c;到逐步优化并成功解决该问题的全过程&#xff0c;希望对深度学习开发者有所借鉴。 训练数据&am…

FramePack V2版 - 支持首尾帧生成,支持LoRA,支持批量,支持50系显卡,一个强大的AI视频生成软件 本地一键整合包下载

FramePack 是斯坦福大学主导开发的视频生成框架&#xff0c;是一种用于视频生成的下一帧&#xff08;下一帧部分&#xff09;预测神经网络结构&#xff0c;可以逐步生成视频。FramePack 主要开发者之一&#xff0c;就是业内大名鼎鼎的张吕敏大佬&#xff0c;AI领域的“赛博佛祖…

STM32 HAL 通用定时器延时函数

使用通用定时器TIM3&#xff0c;实现ms、us延时。 delay.c #include "delay.h" #include "stm32f1xx_hal.h"TIM_HandleTypeDef htim3;/*** brief 初始化定时器3用于延时* param 无* retval 无*/ void Delay_Init(void) {TIM_ClockConfigTypeDef sClock…

软件功能测试和非功能测试有什么区别和联系?

软件测试是保障软件质量的核心环节&#xff0c;而软件功能测试和非功能测试作为测试领域的两大重要组成部分&#xff0c;承担着不同但又相互关联的职责。 软件功能测试指的是通过验证软件系统的各项功能是否按照需求规格说明书来正确实现&#xff0c;确保软件的功能和业务流程…

使用Java调用TensorFlow与PyTorch模型:DJL框架的应用探索

在现代机器学习的应用场景中&#xff0c;Python早已成为广泛使用的语言&#xff0c;尤其是在深度学习框架TensorFlow和PyTorch的开发和应用中。尽管Java在许多企业级应用中占据一席之地&#xff0c;但因为缺乏直接使用深度学习框架的能力&#xff0c;往往使得Java开发者对机器学…

Docker安装beef-xss

新版的kali系统中安装了beef-xss会因为环境问题而无法启动&#xff0c;可以使用Docker来安装beef-xss&#xff0c;节省很多时间。 安装步骤 1.启动kali虚拟机&#xff0c;打开终端&#xff0c;切换到root用户&#xff0c;然后执行下面的命令下载beef的docker镜像 wget https:…

metasploit(2)生成dll木马

声明&#xff01;本文章所有的工具分享仅仅只是供大家学习交流为主&#xff0c;切勿用于非法用途&#xff0c;如有任何触犯法律的行为&#xff0c;均与本人及团队无关&#xff01;&#xff01;&#xff01; 一、dll文件基本概念 DLL 是一种包含可由多个程序同时使用的代码和数…