【Linux】调试器-gdb使用

大家好,我是苏貝,本篇博客带大家了解Linux的编译器-gcc/g++,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️
在这里插入图片描述


目录

  • 1. 背景
    • (A) 看大小
    • (B) 查看ELF格式的文件
  • 2.使用
    • (A) 进入gdb
    • (B) quit/q:退出gdb
    • (C) run/r:运行代码
    • (D) list/l:查看debug模式的可执行文件的依赖文件的内容
    • (E) b:打断点
    • (F) info/i b:显示断点信息
    • (G) disable 断点编号:使能关闭断点
    • (H) enable 断点编号:使能打开断点
    • (I) d/d 断点编号:删除断点
    • (J) next/n:逐过程,F10
    • (K) step/s:逐语句,F11
    • (L) print/p a/&a:查看变量a内容/地址
    • (M) display a/&a:一直查看变量a的值/地址
    • (N) undisplay 编号:取消对a/&a的一直查看
    • (O) continue/c:运行到下一个断点处
    • (P) 运行结束所在函数后就停下来
    • (Q) until:跳转到指定行,中间的代码都已执行
    • (R)info/I locals:查看当前栈帧局部变量的值

1. 背景

程序的发布方式有两种,debug模式和release模式 。其中,debug模式可被调试(编译器形成可执行程序的时候会给可执行程序 添加调试信息, release模式不能被调试
Linux 中gcc/g++出来的二进制程序,默认是release模式
要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项

如何证明由release变debug模式会添加调试信息呢?

(A) 看大小

先写出一个.c文件
在这里插入图片描述

再写出makefile的内容
在这里插入图片描述

Make生成mytest文件,它是可执行文件,是release模式的
在这里插入图片描述

修改makefile的内容

在这里插入图片描述

再生成mytest_debug文件,也是可执行文件,不过是debug模式的
在这里插入图片描述

我们发现,debug模式的文件大小大于release模式的

(B) 查看ELF格式的文件

readelf 命令,一般用于查看ELF格式的文件信息,常见的文件如在Linux上的可执行文件,动态库( * .so)或者静态库(*.a) 等包含ELF格式的文件。

在这里插入图片描述

Debug模式下比Release模式下多出了上图的可执行文件

以上2点可大体证明由release变debug模式会添加调试信息


2.使用

(A) 进入gdb

gdb +文件名,只有出现done才表示已经进入调试
在这里插入图片描述

(B) quit/q:退出gdb

在这里插入图片描述

© run/r:运行代码

(D) list/l:查看debug模式的可执行文件的依赖文件的内容

默认只显示10行
如果在进入调试并且操作后,在命令行直接按enter键,那么gdb执行的是上一条指令(例外:当上一条指令是list/l时,会打印出上一条指令下面的未打印的代码)

使用方式:

  1. list/l:将main函数作为中间,显示main函数的上下文
    在这里插入图片描述

  2. list/l 文件名:行号/函数名
    在这里插入图片描述
    在这里插入图片描述

  3. list/l 行号/函数名
    在这里插入图片描述

上面的3种方法都可以打印文件内容,可是我们发现代码大于10行,如何打印全部的代码呢?直接按enter键
在这里插入图片描述

当代码全部打印完后,再想打印就会跳出提示

(E) b:打断点

使用方法:

  1. b 行号/函数名
    在这里插入图片描述

  2. b 文件名:行号/函数名
    在这里插入图片描述

断点的作用:在run/r时,停在断点哪一行
在这里插入图片描述

注意:断点编号只会一直递增
如果我先删除编号为1的断点,即31行的断点,再在31行打断点,此时断电编号为5而非1

(F) info/i b:显示断点信息

在这里插入图片描述

断点信息:
Num:断点编号
Enb:使能,表示断电是否打开,y:打开,n:关闭

(G) disable 断点编号:使能关闭断点

未关闭断点2时,run/r停在第29行。关闭断点2,则停在31行
在这里插入图片描述

(H) enable 断点编号:使能打开断点

在这里插入图片描述

(I) d/d 断点编号:删除断点

d:删除所有的断点
d 断点编号:删除指定断点
在这里插入图片描述

(J) next/n:逐过程,F10

会一行一行的执行,如果遇到函数,则不进入函数,直接执行完函数

(K) step/s:逐语句,F11

会一行一行的执行,如果遇到函数,则进入函数

(L) print/p a/&a:查看变量a内容/地址

当我们用vs调试时,遇见循环时,能一边看着代码,一边看着变量的值/地址,Linux也可以实现
在这里插入图片描述
在这里插入图片描述

(M) display a/&a:一直查看变量a的值/地址

在上面的print/p命令中,想要知道每次循环时a/&a,就要在每次循环时print/p a/&a,很麻烦,且没有必要,所以出现了display,只要display a/&a,在每次循环时,自动出现a/&a

在这里插入图片描述

(N) undisplay 编号:取消对a/&a的一直查看

在这里插入图片描述

(O) continue/c:运行到下一个断点处

在这里插入图片描述

§ 运行结束所在函数后就停下来

在这里插入图片描述

(Q) until:跳转到指定行,中间的代码都已执行

在这里插入图片描述

(R)info/I locals:查看当前栈帧局部变量的值

在这里插入图片描述


好了,那么本篇博客就到此结束了,如果你觉得本篇博客对你有些帮助,可以给个大大的赞👍吗,感谢看到这里,我们下篇博客见❤️

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

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

相关文章

【码农日常】将mp4转换为逐帧图片

项目场景: 拍摄了一段视频记录设备工作的状态和测量仪器的实时数据。由于测量仪器岁数比较大,不够智能,遂打算将视频转换为逐帧图片进行分析。 网上没找到现成工具,借鉴网上大神的操作方式打算用python写一个工具。 问题描述 用…

Mybatis中collection和association的区别

在MyBatis中,如果我们想对一对一或者一对多的多表进行查询,该如何处理呢? MyBatis提供了下面两个标签来处理一对一、多对一、一对多的映射关系: association: 处理一对一、多对一 collection: 处理一对多 一对一 每个人都有身份…

一、VIsual Studio下的Qt环境配置(Visual Studio 2022 + Qt 5.12.10)

一、下载编译器Visual Studio2022和Qt 5.12.10 Visual Studio 2022 社区版就够学习使用了 Qt5.12.10 安装教程网上搜,一大堆 也很简单,配置直接选默认,路径留意一下即可 二、配置环境 Ⅰ,配置Qt环境变量 系统变量下的Path&a…

【DevOps】深入解析 Docker日志分析和服务故障排除技巧

在今天的云计算和微服务架构中,Docker凭借其轻量级和高效的容器化技术,已成为软件部署不可或缺的一部分。然而,随着应用复杂性的增加,有效的日志管理和故障排除能力成为了开发者和运维人员必须掌握的核心技能。本文将带你深入探索…

AI办公自动化-用kimi自动清理删除重复文件

在kimichat中输入提示词: 你是一个Python编程专家,要完成一个编写Python脚本的任务,具体步骤如下: 1、打开文件夹D:\downloads; 2、哈希值比较比较里面所有的文件,如果文件相同,那么移动多余…

鲲鹏服务器ARM硬件的高字节忽略(Top Byte Ignore,TBI)

HWASan1 和HWASanIO2 等借助ARM的高字节忽略(Top Byte Ignore,TBI)的硬件特性,使用内存标记检测内存错误。TBI是指64位ARM机器中,程序64位地址中最高的字节被硬件忽略,实际的地址空间只有56位。我们在鲲鹏服…

群晖NAS本地搭建Bitwarden密码管理服务并实现远程同步密码托管

文章目录 1. 拉取Bitwarden镜像2. 运行Bitwarden镜像3. 本地访问4. 群晖安装Cpolar5. 配置公网地址6. 公网访问Bitwarden7. 固定公网地址8. 浏览器密码托管设置 Bitwarden是一个密码管理器应用程序,适用于在多个设备和浏览器之间同步密码。自建密码管理软件bitwarde…

华为配置智能无损网络综合

配置智能无损网络综合示例 适用产品和版本 安装了P系列单板的CE16800、CE6866、CE6866K、CE8851-32CQ8DQ-P、CE8851K系列交换机V300R020C00或更高版本。 安装了SAN系列单板的CE16800、CE6860-SAN、CE8850-SAN系列交换机V300R020C10或更高版本。 CE6860-HAM、CE8850-HAM系列交换…

初识FlaskMySQL实现前后端通信 全栈开发之路——后端篇(1)

全栈开发一条龙——前端篇 第一篇:框架确定、ide设置与项目创建 第二篇:介绍项目文件意义、组件结构与导入以及setup的引入。 第三篇:setup语法,设置响应式数据。 第四篇:数据绑定、计算属性和watch监视 第五篇 : 组件…

02-WPF_基础(二)

3、控件学习 控件学习 布局控件: panel、Grid 内容空间:Context 之恶能容纳一个控件或布局控件 代表提内容控件:内容控件可以设置标题 Header 父类:HeaderContextControl。 条目控件:可以显示一列数据&#xf…

CircleCI的原理及应用详解(二)

本系列文章简介: 在当今快速发展的软件开发环境中,如何确保代码质量、提升开发效率以及快速响应市场需求成为了每个开发团队面临的重要挑战。为了解决这些问题,持续集成和持续部署(CI/CD)工具应运而生,它们…

前端面试题大合集4----框架篇(React)

一、React 合成事件 Dom事件流分三个阶段&#xff1a;事件捕获阶段&#xff0c;目标阶段&#xff0c;事件冒泡阶段 React在事件绑定时有一套自身的机制&#xff0c;就是合成事件。如下比较直观&#xff1a; react中事件绑定&#xff1a; <div className"dome" …

如何解决3D模型变黑或贴图不显示的问题---模大狮模型网

在进行3D建模和视觉渲染时&#xff0c;经常会遇到模型表面变黑或贴图不显示的问题&#xff0c;这可能严重影响最终视觉效果的质量。这些问题通常与材质设置、光照配置或文件路径错误有关。本文将探讨几种常见原因及其解决方法&#xff0c;帮助3D艺术家和开发者更有效地处理这些…

Java | Leetcode Java题解之第88题合并两个有序数组

题目&#xff1a; 题解&#xff1a; class Solution {public void merge(int[] nums1, int m, int[] nums2, int n) {int p1 m - 1, p2 n - 1;int tail m n - 1;int cur;while (p1 > 0 || p2 > 0) {if (p1 -1) {cur nums2[p2--];} else if (p2 -1) {cur nums1[p…

Hive表数据优化

Hive表数据优化 1.文件格式 为Hive表中的数据选择一个合适的文件格式&#xff0c;对提高查询性能的提高是十分有益的。 &#xff08;1&#xff09;Text File 文本文件是Hive默认使用的文件格式&#xff0c;文本文件中的一行内容&#xff0c;就对应Hive表中的一行记录。 可…

VTK图形算法API:vtkSphereSource,球几何数据

大家好&#xff0c;我是先锋&#xff0c;专注于AI领域和编程技术分享&#xff0c;在这里定期分享计算机编程知识&#xff0c;AI应用知识&#xff0c;职场经验&#xff1b; 本系列介绍VTK图像算法API&#xff0c;后续会介绍VTK项目实践应用&#xff0c;关注我&#xff0c;不错过…

Linux中system V 标准 与 Psix标准

一. 简介 本文简单了解一下&#xff0c; Linux下 的两种标准&#xff1a; system V标准与 Psix标准。 二. Linux中system V 标准 与 Psix标准 1. Linux中system V 标准 与 Psix标准 System V 和 POSIX 是指定操作系统如何实现标准化API的两大标准。 System V 是一套标准&…

GPS与精致农业 无人机应用 农业遥感 农业类

全球定位系统是美国国防部主要为满足军事部门对海上、陆地和空中设施进行高精度导航和定位的要求而建立的。GPS系统最基本的特点是以“多星、高轨、高频、测量-测距”为体制&#xff0c;以高精度的原子钟为核心。GPS作为新一代卫星导航与定位系统&#xff0c;不仅具有全球性、全…

MySQL获取某一天(例如 ‘2023-10-23‘)的非重复 shopid 值

如果你只想获取某一天&#xff08;例如 2023-10-23&#xff09;的非重复 shopid 值&#xff0c;而不计算它们的数量&#xff0c;你可以使用 DISTINCT 关键字结合 WHERE 子句来查询。以下是相应的 SQL 查询&#xff1a; SELECT DISTINCT shopid FROM your_table_name WHERE…

13.复习1笔记

文章目录 1. 习题12. 习题22.1 小题12.2 小题2 3. 习题33.1 小题3.2 小题 1. 习题1 假设我们有三个向量 U , V , W U,V,W U,V,W是 R 7 R^7 R7空间内的非零向量。由U,V,W三个向量生成的属于 R 7 R^7 R7的子空间维度多少&#xff1f; 因为U,V,W是非零向量&#xff0c;所以子空间…