Linux调试------gdb的使用

目录

前言

一、gdb打开可执行程序

二、查看代码与操作断点

1.l 查看代码

2.b 打断点

3.info  b  查看断点信息

4.d   删除断点

5.disable 和 enable 断点的禁用与启用

三、调试 

1.r  启动调试 

2. n  逐过程

3. s  逐语句 

4.display显示变量

5.undisplay 取消显示

四、跳转命令与特殊命令

1.until 跳转到指定行

2. c  跳转到断点处

3.finish 运行到当前函数结尾

4.bt 查看调用堆栈

5. set var  修改变量值


前言

在vs2022,有可视化界面,我们调试起来非常简单,点一点就行了,在linux下,如果我们需要调试代码,就得用到工具gdb。

没有安装gdb的可以使用下面代码安装

sudo yum install -y gdb

一、gdb打开可执行程序

调试之前,我们需要先写出一份代码,我们拿下面的累加的代码举例调试

#include <stdio.h>int AddToEnd(int end)
{int i = 1;int sum = 0;for(;i<end;i++){sum+=i;}return sum;
}int main()
{int end = 100;int result = 0;result = AddToEnd(end);printf("result:%d\n",result);return 0;                                                       
}

程序很简单,我们vim编辑好代码  gcc 编译一下,再使用gdb + 可执行程序进行调试。

发现没有debug模块,这是因为我们gcc编译默认模式为release模式,如果要使用debug模式需要添加 -g 

二、查看代码与操作断点

l(list)查看代码
b(breakpoint)打断点
info b查看断点
d (delete) + 断点编号删除断点
disable禁用断点
enable启动断点

1.l 查看代码

输入 l  可以查看部分代码,gbd会将他认为重要的部分代码给我们做展示。

输入  l + 1  从第一行开始查看代码,一直按回车可以往下查看 

2.b 打断点

打断点的三种方式   

b + 行号 

b + 函数名 

b + 指定文件:行号(多文件下比较方便)

3.info  b  查看断点信息

info b 查看断点信息

4.d   删除断点

d + 断点编号删除断点

5.disable 和 enable 断点的禁用与启用

info b查看断点信息中,Enb这一行为y代表断点是启动状态。

disable + 编号  可以让断点被禁用。 

 

输入 r 运行并不会在被禁用的断点中停止

 

enable + 编号  启动断点,这样  r  运行就会在断点处停止下来。

三、调试 

r(run)启动调试
n(next)逐过程调试
s(step)逐语句调试
display显示变量
undisplay + 编号取消变量显示

1.r  启动调试 

r(run)启动调试,遇到断点处停下来,如果一直没遇到断点,就相当于运行程序。

2. n  逐过程

n (next)为逐过程调试代码,相当于vs2022的F10,遇到函数直接执行到下一行,不进入函数内部。

3. s  逐语句 

s(step)为逐语句调试代码,相当于vs2022的F11,遇到函数会进入函数继续调试,如下。

4.display显示变量

display + 变量 可以显示该变量的值,后续执行时都可以看到该变量。

5.undisplay 取消显示

undisplay + 变量编号 取消显示变量。

四、跳转命令与特殊命令

until跳转到指定行
c跳转到断点处
finish运行到当前函数结尾
bt查看调用堆栈
set var修改变量值

1.until 跳转到指定行

until + 行号   跳转到指定行。

2. c  跳转到断点处

c(continue) 跳转到下一个断点处

3.finish 运行到当前函数结尾

finish 将当前函数运行完停止。

4.bt 查看调用堆栈

bt  查看调用堆栈,这里在函数AddToEnd内部,因此有两个堆栈。

5. set var  修改变量值

set var 变量 = 值   修改变量的值。如下,修改了变量的值,输出结果也不一样了。

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

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

相关文章

2024.1.10每日一题

LeetCode 2696.删除字串后的字符串最小长度 2696. 删除子串后的字符串最小长度 - 力扣&#xff08;LeetCode&#xff09; 题目描述 给你一个仅由 大写 英文字符组成的字符串 s 。 你可以对此字符串执行一些操作&#xff0c;在每一步操作中&#xff0c;你可以从 s 中删除 任…

【教学类-45-04】X-Y之间的“三连减加“题(a-b+c=)

作品展示&#xff1a; 背景需求&#xff1a; 【教学类-45-02】X-Y之间的“三连减“题(a-b-c)-CSDN博客文章浏览阅读465次&#xff0c;点赞15次&#xff0c;收藏7次。【教学类-45-02】X-Y之间的"三连减"题(a-b-c)https://blog.csdn.net/reasonsummer/article/details…

Redis 主从、哨兵和分片集群简单介绍

Redis 主从集群架构 单节点 redis 并发能力有上限&#xff0c;要进一步提高 redis 并发能力&#xff0c;就要搭建主从集群&#xff0c;实现读写分离 主从同步原理 Replicaition id&#xff1a;每台 master 机器都一个 repl_id&#xff0c;是数据集的表示&#xff0c;若 salv…

关于OSPF的五种报文类型介绍、OSPF八种状态机变化与报文交互介绍。

4.2.2 路由 OSPF&#xff08;OSPF的5种报文、8种状态机、邻居与邻接的形成&#xff09; 目录 OSPF的5种报文Hello报文报文字段简介 DD/DBD报文DD报文字段简介&#xff08;首个DD报文&#xff09;DD报文字段简介&#xff08;非首个DD报文——携带简要路由信息&#xff09;LSR报文…

FineBI实战项目一(7):每天每小时上架商品个数

1 明确数据分析目标 对所有商品的商家时间进行统计&#xff0c;统计每个小时上架商品的个数 2 创建用于保存数据分析结果的表 create table app_hour_goods(id int primary key auto_increment,daystr varchar(20),hourstr varchar(20),cnt int ); 3 编写SQL语句进行数据分析…

WPS或word中英文字母自动调整大小写,取消自动首字母大写,全部英文单词首字母大小写变换方法

提示&#xff1a;写英文论文时&#xff0c;如何实现英文字母大小写的自动切换&#xff0c;不用再傻傻的一个字母一个字母的编辑了&#xff0c;一篇文章搞定WPS与Word中字母大小写切换 文章目录 一、WPS英文单词大小写自动修改与首字母大写调整英文字母全部由大写变成小写 或 小…

论文阅读 Attention is all u need - transformer

文章目录 1 摘要1.1 核心 2 模型架构2.1 概览2.2 理解encoder-decoder架构2.2.1 对比seq2seq&#xff0c;RNN2.2.2 我的理解 3. Sublayer3.1 多头注意力 multi-head self-attention3.1.1 缩放点乘注意力 Scaled Dot-Product Attention3.1.2 QKV3.1.3 multi-head3.1.4 masked 3.…

蓝牙模块在智能城市中的关键角色

随着城市的不断发展&#xff0c;智能城市的概念正日益深入人心。在构建智能城市的过程中&#xff0c;蓝牙模块作为一种无线通信技术&#xff0c;发挥着重要的角色&#xff0c;连接和协调各种智能设备&#xff0c;提升城市的效率、可持续性和便利性。本文将深入探讨蓝牙模块在智…

React 入门 - 05(响应式与事件绑定)

本章内容 目录 一、响应式设计思想二、React 中的事件绑定 继上一节我们简单实现一个 TodoList来更加了解编写组件的一些细节。本节继续这个案例功能的完成。 一、响应式设计思想 1、在原生的 JS中&#xff0c;如果要实现点击”提交“按钮就将输入框的内容添加至页面列表中&…

对话惠买集团董事长兼CEO杜瑞勇:直播电商粗放时代结束,如何用AI+XR打造精细化的智慧直播生态?

“ 未来将是专业选手精细化运营的智慧直播时代。“ 整理 | 梦婕 编辑 | 渔舟 出品&#xff5c;极新&#xff06;北京电子商务协会 直播电商在经过爆发式增长后&#xff0c;从业者不断涌入&#xff0c;竞争日趋激烈&#xff0c;行业发展必然将会进入到一个缓慢增长阶段。直播…

时间序列数据库选型: influxdb; netdiscover列出docker实例们的ip

influxdb influxdb: 有收费版本、有开源版本 influxdb 安装、启动(docker) docker run -itd --name influxdb-dev -p 8086:8086 influxdb #influxdb的web客户端(端口8003)被去掉了 #8006是web-service端口#docker exec -it influxdb-dev bashinfluxdb 自带web界面 从后面的…

Angular - 笔记

文章目录 语法属性绑定引用模板变量组件绑定父组件传子组件 input子组件传父组件 outputEventEmitter ViewChildViewChildren获取子组件对象列表 管道常用模块 参考文档 语法 属性绑定 Angular 的双向绑定语法是方括号和圆括号的组合 [()]。[] 进行属性绑定&#xff0c;() 进行…

phpcms v9后台添加草稿箱功能

一、后台添加文章模板phpcms/modules/content/templates/content_add.tpl.php中94行增加”保存草稿“按钮&#xff1a; <div class"button"><input value"<?php echo L(save_draft);?>" type"submit" name"dosubmit_draf…

PostGIS教程学习十九:基于索引的聚簇

PostGIS教程学习十九&#xff1a;基于索引的聚簇 数据库只能以从磁盘获取信息的速度检索信息。小型数据库将完全位于于RAM缓存&#xff08;内存&#xff09;&#xff0c;并摆脱物理磁盘访问速度慢的限制。但是对于大型数据库&#xff0c;对物理磁盘的访问将限制数据库的信息检…

DataFrame详解

清洗相关的API 清洗相关的API: 1.去重API: dropDupilcates 2.删除缺失值API: dropna 3.替换缺失值API: fillna 去重API: dropDupilcates dropDuplicates(subset):删除重复数据 1.用来删除重复数据,如果没有指定参数subset,比对行中所有字段内容,如果全部相同,则认为是重复数据,…

学习笔记之——3D Gaussian Splatting及其在SLAM与自动驾驶上的应用调研

之前博客介绍了NeRF-SLAM&#xff0c;其中对于3D Gaussian Splatting没有太深入介绍。本博文对3D Gaussian Splatting相关的一些工作做调研。 学习笔记之——NeRF SLAM&#xff08;基于神经辐射场的SLAM&#xff09;-CSDN博客文章浏览阅读967次&#xff0c;点赞22次&#xff0…

Java中的输入输出处理(一)

文件 文件&#xff1a;文件是放在一起的数据的集合。比如1.TXT。 存储地方&#xff1a;文件一般存储在硬盘&#xff0c;CD里比如D盘 如何访问文件属性&#xff1a;我们可以通过java.io.File类对其处理 File类 常用方法&#xff1a; 方法名称说明boolean exists()判断文件或目…

LiveGBS流媒体平台GB/T28181常见问题-国标编号是什么设备编号和通道国标编号标记唯一的摄像头|视频|镜头通道

LiveGBS国标GB28181中国标编号是什么设备编号和通道国标编号标记唯一的摄像头|视频|镜头通道 1、什么是国标编号&#xff1f;2、国标设备ID和通道ID3、ID 统一编码规则4、搭建GB28181视频直播平台 1、什么是国标编号&#xff1f; 国标GB28181对接过程中&#xff0c;可能有的小…

安科瑞对电子半导体行业电能质量监测与治理系统解决方案——安科瑞赵嘉敏

摘要&#xff1a;在国家鼓励半导体材料国产化的政策导向下&#xff0c;本土半导体材料厂商不断提升半导体产品技术水平和研发能力&#xff0c;逐渐打破了国外半导体厂商的垄断格局半导体材料国产化进程&#xff0c;促进中国半导体行业的发展。半导体产品的制造使用到的设备如单…

c++|关键字extern

一个C语言项目往往由多个文件组合而成。而对于多个文件来说&#xff0c;它们可能会共用到一些相同的变量。而有些情况下&#xff0c;这些相同的变量并没有出现在本文件内&#xff0c;有可能在其他文件内。而一个文件可能只会搜寻该文件内部是否有该变量。 所以&#xff0c;需要…