【Linux】-关于调试器gdb的介绍和使用

2023-11-17

作者:小树苗渴望变成参天大树
作者宣言:认真写好每一篇博客
作者gitee:gitee
在这里插入图片描述
如 果 你 喜 欢 作 者 的 文 章 ,就 给 作 者 点 点 关 注 吧!


前言

这篇讲给大家介绍关于Linux中的调试,它和vs的操作思想是一样的,帮助我们调试代码,所以关于一些调试名词的大家是知道的,这篇的指令选项特别多,大家下来要好好练习,不然很容易忘,在vs讲调试之前,我们也介绍过关于debug和release的介绍,在Linux上也有着两个版本,我们话不多说,开始进入正文


一、Linux中的debug和release

在Linux上,我们gcc/g++默认生成的是动态的release版本的可执行程序,我们使用 -g 选项就可以使可执行程序变成debug版本的,这样才有调试信息。
在这里插入图片描述

我们看到debug版本的可执行程序比release版本的体积要大些,因为增加了调试信息。

我们来使用一个readelf指令来看看生成的文件是否有debug调试信息
在这里插入图片描述
我们在平时写代码的时候加一个-g生成debug版本才能进行调试。这篇我的可执行程序都是debug版本的。接下来开始正式介绍gdb调试器

二、gdb的使用

在讲解这个之前,我希望大家看看我之前这篇博客写关于vs上的调试vs上的调试技巧,接下来的一些名词我就不具体给大家介绍了,我对标vs上的调试给大家讲解,接下来我们先把准备工作做好。写一个程序,把自动化构建写好,在vs上准备一份相同的代码,方便做对比:
在这里插入图片描述

1.进入调试

gdb+可执行程序

在这里插入图片描述

此时你就进入调试,相当于vs的CTRL+F10

2.显示代码

我们进入调试之后,是看不见代码的,所以我们要将其显示出来,使用l指令
在这里插入图片描述

l默认从随机位置开始每次显示10行直到显示结束,想要从第一行开始展示输入指令l 0从第一行开始显示:
在这里插入图片描述

注意:gdb会记录上一条的命令,如果你下一条想要执行相同的命令,就可以直接回车就好了

3.执行和断点

断点是我们调试一个重点的东西,它可以不让我们从第一行开始调试,直接跳到想要行开始调试。
(1) 设置断点b+行号
在这里插入图片描述
(2)显示断点info b
在这里插入图片描述
这个显示也可以直接把你的断点编号显示出来,最后显示的是第几行断点
(3)删除断点d+编号
在这里插入图片描述

我们不能通过行号删除断点,只有通过编号才能删除断点

(4)开始调试
我们刚才进入调试,还没有开始调试,输入r开始调试。

在没有断点的情况下,这个指令就相当于运行程序,并不会像vs上停在main函数的入口:
在这里插入图片描述
在有断点的情况下,会跳到最近的断点处
在这里插入图片描述

4.逐语句和逐过程

这个是调试的关键步骤,我们的逐语句是一条一条语句的的执行,逐过程是一次执行一个过程,不会进入函数体内

(1)逐过程n会跳到下一个过程,有空格也会跳过
在这里插入图片描述
(2)逐语句s进入函数内部
在这里插入图片描述

当你正在调试的时候,像重新调试,就再次输入r,从头开始调试

在这里插入图片描述
(3)查看函数堆栈bt
在这里插入图片描述

(4)快速结束此次函数的运行finish
这个在vs上是没有的,如果你刚进入函数体内,就像出来,就使用Finnish命令:
在这里插入图片描述
(5)函数体内跳到指定行until+行号
在这里插入图片描述

这个也是vs上没有的,但是这个命令只建议在函数体内使用,不建议从另一个函数跳到另一个函数。

5.显示变量

(1)调试的一个重要环节就是查看你想要的变量值,看看和你想的有什么变化
我们使用p+变量命令
在这里插入图片描述
但是我们在vs上的变量是一直可以看到的,不是像现在每次都要输入指令才能看到,而且没有显示变量名,所以我们接下来要使用常显示命令display+变量
在这里插入图片描述

虽然没有vs上看到直观,这也是命令行的缺点

(2)删除变量undispaly+编号
在这里插入图片描述

这个和删除断点一下,需要通过编号来进行删除

6.断点之间的执行

在vs上我们打两个以上断点,通过F5就可以进行断点之间的执行
在这里插入图片描述
在gdb中可以使用c来进行断点之间的执行
在这里插入图片描述

7.启动断点和禁用断点

在这里插入图片描述

禁用断点就是是此断点失能,但是断点还在,我们来看看gdb上的是什么样的

禁用断点disable+编号
在这里插入图片描述
启动断点enable+编号

在这里插入图片描述

三、总结

大家对于gdb的命令了解我今天所讲的这些就行了,大家下来孰能生巧就好,就好比vs上的调试没有什么难度,要多用,就会了,今天博主的分享就到这里了,我们下篇再见
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Linux】-关于调试器gdb的介绍和使用 的相关文章

  • 从 Python 调用 PARI/GP

    我想打电话PARI GP http pari math u bordeaux fr dochtml gpman html仅从Python计算函数nextprime n 对于不同的n是我定义的 不幸的是我无法得到帕里蟒蛇 http code
  • fopen 不返回

    我在 C 程序中使用 fopen 以只读模式 r 打开文件 但就我而言 我观察到 fopen 调用没有返回 它不返回 NULL 或有效指针 执行在 fopen 调用时被阻止 文件补丁绝对正确 我已经验证过 并且不存在与权限相关的问题 任何人
  • 加载数据infile,Windows和Linux的区别

    我有一个需要导入到 MySQL 表的文件 这是我的命令 LOAD DATA LOCAL INFILE C test csv INTO TABLE logs fields terminated by LINES terminated BY n
  • Android 时钟滴答数 [赫兹]

    关于 proc pid stat 中应用程序的总 CPU 使用率 https stackoverflow com questions 16726779 total cpu usage of an application from proc
  • arm64和armhf有什么区别?

    Raspberry Pi Type 3 具有 64 位 CPU 但其架构不是arm64 but armhf 有什么区别arm64 and armhf armhf代表 arm hard float 是给定的名称Debian 端口 https
  • 无法使用 wget 在 CentOS 机器上安装 oracle jdk

    我想在CentOS上安装oracle java jdk 8 我无法安装 java jdk 因为当我尝试使用命令安装 java jdk 时 root ADARSH PROD1 wget no cookies no check certific
  • 如何在 Linux shell 中将十六进制转换为 ASCII 字符?

    假设我有一个字符串5a 这是 ASCII 字母的十六进制表示Z 我需要找到一个 Linux shell 命令 它将接受一个十六进制字符串并输出该十六进制字符串代表的 ASCII 字符 所以如果我这样做 echo 5a command im
  • PHP 从命令行启动 gui 程序,但 apache 不启动

    首先 我阅读了有类似问题的人的一些帖子 但所有答案都没有超出导出 DISPLAY 0 0 和 xauth cookies 这是我的问题 提前感谢您的宝贵时间 我开发了一个小库 它使用 OpenGL 和 GLSL 渲染货架 过去几天我将它包装
  • Linux 内核标识符中前导和尾随下划线的含义是什么?

    我不断遇到一些小约定 比如 KERNEL Are the 在这种情况下 是内核开发人员使用的命名约定 还是以这种方式命名宏的语法特定原因 整个代码中有很多这样的例子 例如 某些函数和变量以 甚至 这有什么具体原因吗 它似乎被广泛使用 我只需
  • 如何在apache 2.4.6上安装apxs模块

    我刚刚用过apt get update我的 apache 已更新为2 4 6 我想安装 apxs 来编译模块 但收到此错误 The following packages have unmet dependencies apache2 pre
  • 在 Linux 上使用多处理时,TKinter 窗口不会出现

    我想生成另一个进程来异步显示错误消息 同时应用程序的其余部分继续 我正在使用multiprocessingPython 2 6 中的模块来创建进程 我试图用以下命令显示窗口TKinter 这段代码在Windows上运行良好 但在Linux上
  • 使用 sh 运行 bash 脚本

    我有 bash 脚本 它需要 bash 另一个人尝试运行它 sh script name sh 它失败了 因为 sh 是他的发行版中 dash 的符号链接 ls la bin sh lrwxrwxrwx 1 root root 4 Aug
  • 在我的 index.php 中加载 CSS 和 JS 等资源时出现错误 403

    我使用的是 Linux Elementary OS 并在 opt 中安装了 lampp My CSS and JS won t load When I inspect my page through browser The console
  • 多处理:仅使用物理核心?

    我有一个函数foo它消耗大量内存 我想并行运行多个实例 假设我有一个有 4 个物理核心的 CPU 每个核心有两个逻辑核心 我的系统有足够的内存来容纳 4 个实例foo并行但不是 8 个 此外 由于这 8 个核心中的 4 个是逻辑核心 我也不
  • 在脚本内使用不带密码的 sudo

    由于某种原因 我需要作为用户在没有 sudo 的情况下运行脚本 script sh 该脚本需要 root 权限才能工作 我认为将 sudo 放入 script sh 中是唯一的解决方案 让我们举个例子 script sh bin sh su
  • Linux 上有关 getBounds() 和 setBounds() 的 bug_id=4806603 的解决方法?

    在 Linux 平台上 Frame getBounds 和 Frame setBounds 的工作方式不一致 这在 2003 年就已经有报道了 请参见此处 http bugs java com bugdatabase view bug do
  • 如何更改 Apache 服务器的根目录? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何更改 Apache 服务器的文档根目录 我基本上想要localhost从 来 users spencer projects目录而不是
  • Gtk-ERROR **:检测到 GTK+ 2.x 符号

    我正在使用 gcc 编译我的 c 应用程序 并使用以下标志 gcc evis c pkg config cflags libs gtk 2 0 libs clutter gtk 1 0 libs gthread 2 0 Wall o evi
  • 监视目录的更改

    很像一个类似的问题 https stackoverflow com questions 112276 directory modification monitoring 我正在尝试监视 Linux 机器上的目录以添加新文件 并希望在这些新文
  • 如何在c linux中收听特定接口上的广播?

    我目前可以通过执行以下操作来收听我编写的简单广播服务器 仅广播 hello int fd socket PF INET SOCK DGRAM 0 struct sockaddr in addr memset addr 0 sizeof ad

随机推荐

  • caffe: test code 执行出问题: Check failed: FLAGS_weights.size() > 0 (0 vs. 0) Need model weights to score...

    Check failed FLAGS weights size gt 0 0 vs 0 Need model weights to score 出现这个错误 但是我记得昨天还好好的 网上搜了也没有答案 后来仔细检查才发现 原来存放 caff
  • QT5.9.4 + opencv3.0.0编译配置

    QT5 9 4 opencv3 0 0编译配置 1 安装QT5 9 4 QT下载地址 http download qt io archive qt 安装完毕之后将以下目录加入到系统环境变量 E Qt Qt5 9 4 5 9 4 mingw5
  • windows系统pycharm安装,opencv安装,anaconda安装

    1 python IDE安装 3 9 https www python org getit 2 pycharm安装 社区版最新 https www jetbrains com pycharm 3 anaconda3安装 https www
  • Electron 自定义 Dock 图标

    转载自https cloud tencent com developer article 1650700 学透 Electron 自定义 Dock 图标 Mac OS 做为前端开发者的首选操作系统相信大家再熟悉不过了 在电脑主界面的底部可以
  • epoll在多线程中的应用-EPOLLEXCLUSIVE和REUSEPORT(一)

    以下均为对epoll在多线程中的使用的一些笔记 如果有不对的地方 烦请指出 主要对于我所遇到的问题进行讨论 不会讨论代码如何改写 探讨如何解决这个问题 一 引言 这些问题均是我在编写我的Web服务器遇到的 我在编写多线程Web服务器的时候
  • Docker 镜像库国内加速的几种方法

    概述 在国内 拉取 Docker 镜像速度慢 时不时断线 无账号导致限流等 比较痛苦 这里提供加速 优化的几种方法 梳理一下 会碰到以下情况 国内下载速度慢 时不时断线 是因为网络被限制了 没有公共镜像库账号导致限流 是因为 Docker
  • 「网页开发|前端开发|Vue」01 快速入门:快速写一个Vue的HelloWorld项目

    本文主要介绍如何用vue开发的标准化工具vue cli快速搭建一个符合实际业务项目结构的hello world网页项目并理解vue的代码文件结构以及页面渲染流程 文章目录 一 准备工作 安装node js 二 项目搭建 创建项目目录 全局安
  • 谁来教我渗透测试——黑客应该掌握的Windows基础

    今天我们看看作为一个黑客对于Windows应该掌握哪些基础知识 主要内容包含以下四个方面 系统目录 服务 端口和注册表 黑客常用的DOS命令及批处理文件的编写 黑客常用的快捷键 以及如何优化系统 登录密码破解 手动清除木马病毒 系统目录 服
  • 2014年总结

    总结的意义在于认清未来的方向 2014年工作 1 ETL Data Warehouse Data Mining 数据挖掘内容很多 如何与企业需求相结合是重点 2 简单的工作流系统开发 3 体会ArgGIS在物流运输企业中的应用 无论云计算以
  • 色彩空间与像素格式

    转载来自 https www cnblogs com leisure chn p 10290575 html 1 色彩空间基础 颜色是不同波长的光对人眼刺激产生的色彩感觉 色彩空间 Color Space 是颜色的数学表示 根据不同的表示方
  • PSO优化LSTM

    有两个py文件 PSO 1和LSTM 1 在资源那里下载 有数据 环境 python TF2 优化的参数有 神隐藏神经元个数 dropout比率 batch size 这个可以根据自己的意愿改 规定上限和下限 UP 64 0 14 32 D
  • java跨时区问题【相差8小时】

    情况一 后端传递给前端 前端展示到页面中的时间与系统时间相差8小时 解决方法 在该类的日期属性字段上加上注解 JsonFormat pattern yyyy MM dd HH mm ss timezone GMT 8 情况二 展示数据时间与
  • 解决Chrome, NET::ERR_CERT_AUTHORITY_INVALID

    文章目录 前言 解决方法一 解决方法二 总结 前言 解决方法一 首先清理一下缓存 三个点 gt 设置 gt 清除浏览数据 即可 如果还解决不了 因为Chrome是默认使用HSTS传输 严格的http传输方式 解决方法二 在Chrome浏览框
  • C++如何切割String对象

    C 如何切割String对象 C 相较于Java Python 并没有提供的字符串分割的函数split 因此需要自己进行编写 在实际的工作中这一功能会被经常使用 所以进行简单的记录一下 核心函数 代码实现的函数是调用String库中的fin
  • 数学:矩阵求导

    矩阵Y对标量x求导 Y y ij dY dx dy ji dx 求导后 Y变转置了 标量y对矩阵X求导 dy dX Dy Dx ij 求导后 不需要转置 重要结论 y U XV u i x ij v j 于是 dy dX u i v j U
  • ACM-子串(字符串处理)

    问题描述 有一些由英文字符组成的大小写敏感的字符串 请写一个程序 找到一个最长的字符串 x 使得 对于已经给出的字符串中的任意一个 y x 或者是 y 的子串 或者 x 中的字符反序之后得到的新字符串是 y 的子串 输入数据 输入 输入的第
  • vue使用高德地图导航路线失败,获取驾车数据失败:INVALID_USER_SCODE(解决方法)

    高德地图使用路线导航 最近做大屏项目 里面有地图定位 路线导航等方面的功能 在做路线定位是一直都是获取不到导航的路线 经过好长时间的百度看高德api文档终于找到解决方法 解决方法 添加高德地图安全密钥 添加高德安全密钥 安全密钥是和key一
  • 计算机毕业设计-基于SSM的网上书店管理系统

    项目背景 本网上系统是针对目前网上的实际需求 从实际工作出发 对过去的网上系统存在的问题进行分析 结合计算机系统的结构 概念 模型 原理 方法 在计算机各种优势的情况下 采用目前最流行的B S结构和java中流行的ssm框架和eclipse
  • jq ajax fail,javascript - jQuery.ajax fail handler not called - Stack Overflow

    Deprecation Notice The jqXHR success jqXHR error and jqXHR complete callbacks are removed as of jQuery 3 0 You can use j
  • 【Linux】-关于调试器gdb的介绍和使用

    作者 小树苗渴望变成参天大树 作者宣言 认真写好每一篇博客 作者gitee gitee 如 果 你 喜 欢 作 者 的 文 章 就 给 作 者 点 点 关 注 吧 文章目录 前言 一 Linux中的debug和release 二 gdb的使