Linux 调试器 —— gdb 的使用

news2024/9/27 9:26:29

Linux 调试器 —— gdb 的使用

  • 前置条件
    • debug 模式 和 release 模式
    • gdb 下载
  • 基础操作
    • 退出调试器
    • 查看源代码
    • 运行程序
    • 断点
      • 打断点
      • 查看断点
      • 取消断点
      • 关闭断点
      • 开启断点
    • 单步执行
      • 逐过程
      • 逐语句
    • 打印表达式值、变量值、地址等等
      • 单次查看
      • 常显示
    • 运行至下一个断点处
    • 运行完所在函数,就停下来
    • 跳转至指定行
    • 查看当前栈帧局部变量的值
    • 修改变量的值
    • 查看各级函数调用及参数

在写代码时,出现错误 Bug 解决不了总是要调试的,如果是图像化界面(类似 vs2019),那倒还好调试,但是对于服务器端的命令行界面,很难进行像样的调试,所以接下来介绍开发工具调试器:gdb

本篇由于图片较多,看起来繁杂,请利用目录索引翻找

前置条件

debug 模式 和 release 模式

首先要知道,一份代码可以被 两种模式 编译,分别是 debug 模式release 模式 ,而 debug 模式 才能被调试,这对程序员来说是必不可少的; release 模式 是发行版,是给用户使用的,并不含 调试信息 ,所以被 gcc 编译出来的同样一份代码,在 debug 模式 下编译出来的 二进制程序 文件大小要大于 release 模式 下的

gcc 默认是以 release 模式 下编译,需要加上 -g 选项才能变成 debug 模式 ,就像下面这样:

gcc gdbtest.c -o gdb_debug -g

那么 gdb_debug 就是 含有调试信息的二进制可执行程序 ,我们是 对此二进制可执行程序进行调试

gdb 下载

运行以下指令即可:

sudo yum install gdb.x86_64 -y

基础操作

有了类似上面的 gdb_debug 文件,就可以运行 gdb 指令了:

gdb gdb_debug

可以看到如下信息:

在这里插入图片描述

退出调试器

运行如下指令即可:

quit
q

查看源代码

使用 l 或者 list 均可:

list 源代码文件名:此文件内行号或者函数
l 源代码文件名:此文件内行号或者函数

例子:

list gdbtest.c:main
list gdbtest.c:1

l gdbtest.c:main
l gdbtest.c:1

在这里插入图片描述

可是这样只能看见默认的 10 行,所以我们可以先运行 l gdbtest.c:1 指令,然后一直 Enter查看所有代码

在这里插入图片描述

运行程序

run

r

在这里插入图片描述

断点

打断点

b 源代码文件名:此文件内行号或者函数

例子:

b gdbtest.c:17
b gdbtest.c:AddToTarget

在这里插入图片描述

查看断点

info b
i b

在这里插入图片描述

Num 是指 断点编号
Enb 是指 断点的使能y 表示 yes , 表明断点为开启状态n 表示 no ,反之

取消断点

d 断点编号

例子:

d 1

在这里插入图片描述

关闭断点

关闭断点时,断点不会生效

disable 断点编号

在这里插入图片描述

开启断点

enable 断点编号

单步执行

逐过程

逐过程 是显然的 单步执行 ,但对于函数而言,会 把函数当成一条语句直接执行,而不进入 ,所以一个函数就是一个原子的过程

单步执行 后,会将打印结果也给我们显示出来

next
n

如图可知:我们没有进入 AddToTarget() 函数的内部

在这里插入图片描述

逐语句

这个就很好理解了,自己所写的每一条语句都 单步执行包括函数内部语句

逐语句单步执行 后,也会将打印结果也给我们显示出来,甚至会将传过来的参数值都为我们指明

step
s

如图可知:我们进入了 AddToTarget() 函数的内部

在这里插入图片描述

打印表达式值、变量值、地址等等

单次查看

使用 print 或者 p 均可

p 变量
p 表达式

在这里插入图片描述

常显示

会帮我们一直显示出来想要查看的值

display 变量

在这里插入图片描述

想要 关闭常显示 ,如下指令:

undisplay 变量编号

运行至下一个断点处

continue
c

在这里插入图片描述

运行完所在函数,就停下来

finish

在这里插入图片描述

跳转至指定行

until n

查看当前栈帧局部变量的值

info local

修改变量的值

set var 变量=

查看各级函数调用及参数

bt

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

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

相关文章

前端web开发HTML+CSS3+移动web(0基础,超详细)——第4天

一&#xff0c;-div和span标签和字体实体 1.无语义的布局标签 作用&#xff1a;布局网页&#xff08;划分网页区域&#xff0c;摆放内容&#xff09; div:独占一行 span:不换行 <div>div标签&#xff0c;独占一行</div> <span>span 标签&#xff0c;不换行…

Transformer(二)

一、TNT模型 VIT只针对patch进行建模&#xff0c;忽略了其中更小的细节 TNT基本计算 内部transformer重组成新的向量新向量再通过全连接改变输出的特征大小内部组合后的向量与patch编码大小相同最后与原始输入patch向量相加 二、SwinTransformer 解决了哪些问题&#xff1a…

英特尔凌动® P5300 和 P5700 处理器使企业能够优化现代网络基础架构、安全加速器和存储设备之间的性能和成本平衡。

介绍英特尔凌动 P5300 和 P5700 处理器 英特尔凌动处理器提供核心数和硬件功能各异的多种配置&#xff0c;用于支持不同的边缘用例。基于 10 纳米工艺的先进微架构与一组强大的加速器相结合&#xff0c;带来卓越的每核性能和先进的数据包处理能力。这些平台基于高能效的系统级…

SQL Server 的透明数据加密

透明数据加密是SQL Server数据库安全众多特性中的一个&#xff0c;本文只针对透明数据加密。 在此测试之前&#xff0c;已经按照文档如何快速获得一个测试用SQL Server企业版创建了一个SQL Server 2019&#xff0c;并按照文档为SQL Server安装示例数据库AdventureWorks安装了…

Aspose.Words.dll 插入模板表格,使用的是邮件合并MailMerge功能,数据源是DataTable或list对象,实例

本实例中的实例功能有: 1、 Aspose.Words.dll 插入模板指定域替换为文字或html标签,见1 2、Aspose.Words.dll 插入模板表格,使用的是邮件合并MailMerge功能,数据源是DataTable或List对象(将list转换成DataTable),见1和2 3、word转换Pdf文件,见1 4、将多个word输出文…

PXE实现批量主机开机自动安装

华子目录 前言PXE装机的基本工作原理PXE组件实验前的准备工作1.VM进入虚拟网络编辑器关闭dhcp功能2.从RHEL7母机上克隆一个server端和client端3.配置server端4.关闭firewalld和selinux5.mobaxterm使用ssh -X连接到server端6.anaconda-ks.cfg介绍6.1文件概述6.2文件内容6.3文件使…

dbeaver 导入sql 报错,ERROR 2059 (HY000)

dbeaver 导入sql 报错。 C:\Users\admin\AppData\Roaming\DBeaverData\drivers\clients\mysql\win\mysql.exe --default-character-setutf8mb4 -u root --host222.85.214.245 --port11076 res_protect Task ‘MySQL script’ started at Wed Aug 07 16:31:58 CST 2024 ERROR 2…

【c++】基础知识——快速入门c++

&#x1f31f;&#x1f31f;作者主页&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所属专栏&#xff1a;C 目录 前言 一、手搓一个Hello World 二、命名空间namespace 1.命名空间的定义 2.命名空间的使用 3.命名空间补充知识 三、c中的输入和输出 四、缺省参…

哈哈哈日记

最近真的没有什么灵感更新&#xff0c;大家都在更啥呀!我就像天气一样时好时坏的&#xff0c;嘴上每天都是“好想死”&#xff0c;但是身体稍微有点不舒服立马就去看医生&#xff0c;委屈了啥都不能委屈自己&#xff0c;2块钱的矿泉水舍不得买&#xff0c;35一杯的咖啡我倒是看…

Pygame制作简单的跑酷游戏

今天我们来看看如何使用Pygame框架制作一个简单的跑酷游戏。这个游戏包含了基本的游戏元素,如玩家角色、障碍物、背景、音效等,可以作为入门Pygame游戏开发的一个不错的示例。 游戏概述 这是一个简单的横版跑酷游戏,玩家控制一个忍者角色,通过跳跃来躲避迎面而来的各种障碍物…

C++设计模式(代理模式)

1. 电话虫 在海贼中&#xff0c;有一种神奇的通信工具叫做电话虫&#xff08;Den Den Mushi&#xff09;&#xff0c;外形如蜗牛&#xff0c;身上带有斑点或条纹或通体纯色&#xff0c;壳顶上有对讲机或按键&#xff0c;不接通时会睡觉&#xff0c;接通时会惊醒&#xff0c;并发…

bpmn简单使用(制作流程图)

1、先下载依赖&#xff0c;下面是我下载的版本 "bpmn-io/properties-panel": "^3.23.0", "bpmn-js": "^17.9.1", "bpmn-js-properties-panel": "^5.6.1", "camunda-bpmn-moddle": "^7.0.1",…

【鸿蒙开发基础学习】HSP-应用程序包开发与使用

HSP - 应用程序包开发与使用 HSP HSP&#xff08;Harmony Shared Package&#xff09;是动态共享包&#xff0c;可以包含代码、C库、资源和配置文件&#xff0c;通过HSP可以实现代码和资源的共享。HSP不支持独立发布&#xff0c;而是跟随其宿主应用的APP包一起发布&#xff0…

【开端】web系统中返回状态码组织管理

一、绪论 http web系统接口返回状态码有很多中&#xff0c;包括行业内定的状态码 &#xff0c;比如200 表示成功&#xff0c;500表示服务器系统不可用&#xff0c;但是有包含很多业务上自定义的状态码。比如阿里&#xff0c;腾讯这些公司的产品会定义很多自己公司产品的状态码…

Spring全家桶(三):Spring AOP

Spring AOP面向切面编程 1.面向切面编程思维&#xff08;AOP&#xff09; 1.1.面向切面编程思想AOP AOP&#xff1a;Aspect Oriented Programming面向切面编程 AOP可以说是OOP&#xff08;Object Oriented Programming&#xff0c;面向对象编程&#xff09;的补充和完善。O…

宝塔+acme.sh 使用https请求

安装acme.sh curl https://get.acme.sh | sh -s emailmyexample.com [记得修改邮箱]安装后的路径 /root/.acme 设置别名 alias acme.sh~/.acme.sh/acme.sh 运行 source ~/.bashrc 或者打开~/.bashrc文件&#xff0c;输入要设置的alias命令&#xff0c;保存&#xff0c;然后运行…

mysql case when用法

目录 一&#xff1a;概述 二&#xff1a;使用场景 一&#xff1a;概述 CASE WHEN 是 SQL 中的一个条件表达式&#xff0c;用于在 SQL 查询中实现条件逻辑。它类似于编程语言中的 if-else 或 switch 语句。通过使用 CASE WHEN&#xff0c;你可以在执行查询时根据条件对结果进行…

全网最全的设计效率工具?设计师的最佳助手!

身为设计师的你&#xff0c;是不是下载的素材堆积如山&#xff0c;用时却得在文件夹里层层翻找。在PS&#xff0c;Figma等不同的设计软件里做好的效果样式和工程&#xff0c;想要整理和再次使用很麻烦。不过&#xff0c;现在有了千鹿设计助手&#xff0c;提供一系列适合设计师的…

系统编程-02进程间通信

目录 1、管道 2、消息队列 &#xff08;1&#xff09;ftock()--创建IPC的键值KEY &#xff08;2&#xff09;获取消息队列ID &#xff08;3&#xff09;发送和接收消息 &#xff08;4&#xff09;设置或者获取消息队列的相关属性 3、共享内存 &#xff08;1&#xff09…

14.Spring程序部署-Linux部署

文章目录 1. 打包项目2. linux中删除mariadb&#xff0c;下载mysql3. .yml配置文件4.xshell中部署项目1)首先先在Linux中创建一个新的文件夹2)进入刚创建的文件夹&#xff0c;并将刚打包好的.jar包文件拖进来3)进入Linux中的mysql&#xff0c;并建库建表4)启动程序5)Linux服务器…