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

【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)、解决问题(配合上下文代码);

相关文章:

  • Ubuntu下展锐刷机工具spd_dump使用说明
  • 消息中间件RabbitMQ:简要介绍及其Windows安装流程
  • 2025 活体识别+人脸认证工具类【阿里云api,需要先申请试用】
  • 8. ROS中常见命令
  • VS Code + GitHub:高效开发工作流指南
  • 项目实战 -- 发布管理
  • 考研系列-计算机网络-第四章、网络层
  • LeetCode算法题(Go语言实现)_54
  • java/python——两个行为(操作)满足原子性的实现
  • Web前端:Overflow属性(超出裁剪属性)
  • vllm+vllm-ascend本地部署QwQ-32B
  • MYSQL之基础认识(卸载安装登录, 基本概念)
  • Linux论坛安装
  • 【第四章】19-匹配规则定义
  • JavaScript实现二级菜单
  • 【uniapp-兼容性处理】安卓uView组件中u-input后置插槽不展示
  • Vmware esxi 给现有磁盘增加空间后并扩展系统里磁盘空间
  • Redis 键管理
  • AI Agent认知框架(ReAct、函数调用、计划与执行、自问自答、批判修正、思维链、思维树详解和对比,最后表格整理总结
  • redis-7 安装
  • 哈萨克斯坦一名副市长遭枪击
  • 解放日报:订单不撤,中国工程师有能力
  • 85岁眼科专家、武汉大学人民医院原眼科主任喻长泰逝世
  • 从黄仁勋到美国消费者,都在“突围”
  • 第六季了,姐姐们还能掀起怎样的风浪
  • “一城双白金”就在脚下!这场半马将以最高标准打造