gdb调试器

目录

一、前言

debug和release

二、调试操作

2.1、退出  quit

2.2、调试 run

2.3、打断点  b

2.4、查看断点 info b

2.5、查看代码 l

2.6、删除断点 d

2.7、逐过程 n

2.8、打印变量内容 p

2.9、逐语句(进入函数) s

2.10、查看函数调用堆栈 bt

2.11、跑完函数 finish

2.12、常显示 dispaly

2.13、取消常显示 undisplay

2.14、跳转到指定行 until

2.15、跳转到下一个断点 c

2.16、disable和enable

三、总结


一、前言

gdb是Linux下的一种调试工具。我们可以使用命令:sudo yum install -y gdb来安装gdb。

注意:        

        1、程序的发布方式有两种,debug模式和release模式,而想进行调试只能在发布方式为debug版本下。
        2、Linux 通过gcc/g++编译出来的二进制程序,默认是release模式,这也就意味着程序无法调试。
        3、在Linux下要使用gdb调试,必须在源代码生成二进制程序的时候,加上 -g 选项。

debug和release

默认情况下,gdb无法进行对现在发布的程序进行调试(默认是release版本)。

首先我们先写一段下面需要使用的代码

#include<stdio.h> int addnum(int m){int sum=0;                                                                                                                               int i=0;for(i=0;i<m;i++){sum+=i;}return sum;}int main(){int m=10;int ret=addnum(m);printf("%d\n",ret);return 0;}
mytest:test.cgcc -o $@ $^ -std=c99
.PHONY:clean
clean:rm -f mytest mytest_g

然后我们在Makefile中先不加-g选项。这样是不能调试的:

我们给makefile加上-g选项生成debug可执行文件就可以调试;

PHONY:allall:mytest mytest_gmytest:test.cgcc -o $@ $^ -std=c99
mytest_g:test.cgcc -o $@ $^ -std=c99 -g
.PHONY:clean
clean:rm -f mytest mytest_g

二、调试操作

注意:gdb会记录最近的一条命令,如果命令无变化,可以直接回车。

        对于下面的指令足以应付我们日常遇到的一些代码进行相关的调试,解决遇到的问题,同时对于gdb的基本使用我们也能够基本掌握

2.1、退出  quit

功能:退出gdb。

演示:

也可以使用q退出

2.2、调试 run

功能:使程序开始进行调试(也可以使用run)(调试运行,在断点处停下来)

演示:

也可以使用r进行调试

2.3、打断点  b

功能:在某一行打上一个断点

语法: b(break)  行数

演示:

2.4、查看断点 info b

功能:查看断点的各种信息。(查看当前设置了哪些断点)

演示:

2.5、查看代码 l

1、语法: l(list)  行号

        list/l 行号:显示从第n行开始的源代码,每次显示10行,若n未给出则默认从上次的位置往下显示。

2、语法: l(list)  函数名

list/l 函数名:列出某个函数的源代码。

演示:

2.6、删除断点 d

功能:删除某一行的断点。

语法:d  断点编号(NUM)

演示:

2.7、逐过程 n

必须在run(r)过程中调试

功能:逐过程调试。使程序一步一步向下执行。相当于vs中的 f10。也可以用next。

演示:

2.8、打印变量内容 p

功能:打印变量的值。

语法:p/print  变量名。

演示:

2.9、逐语句(进入函数) s

功能:逐语句调试。相当于vs的f11。

演示:

2.10、查看函数调用堆栈 bt

功能:查看各级函数调用及参数。

演示:

2.11、跑完函数 finish

功能:执行完当前正在调用的函数后停下来(不能是主函数)。

2.12、常显示 dispaly

功能:将变量加入常显示(每次停下来都显示它的值)。类似于监视。

语法:display  变量名

2.13、取消常显示 undisplay

功能:取消指定编号变量的常显示。

语法:display 编号

演示:

2.14、跳转到指定行 until

功能:跳转到指定行

语法:until 行号。

演示:

2.15、跳转到下一个断点 c

功能:运行到下一个断点处。

演示:

2.16、disable和enable

disable 断点编号 :禁用指定编号的断点。

 enable 断点编号  :启用指定编号的断点。

三、总结

        至此,所有Linux下的基础工具都已经学完了。有了这些工具,我们可以在Linux下进行代码的编写,编译和调试。使我们在Linux下编写代码显得十分方便。 

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

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

相关文章

Spring (47)如何在Spring Cloud中实现服务发现

在Spring Cloud中&#xff0c;服务发现的功能通常是通过Eureka、Consul或Zookeeper等服务发现工具来实现的。这些工具提供了运行时的服务注册、发现和健康检查等功能。我们将以Eureka为例来深入解析如何在Spring Cloud中实现服务发现。 Eureka的核心概念 Eureka Server: 服务…

【GD32F303红枫派使用手册】第十一节 ADC-电源电压单通道ADC检测实验

11.1 实验内容 通过本实验主要学习以下内容&#xff1a; ADC的简介 GD32F303 ADC工作原理 查询方式实现ADC单通道采样 11.2 实验原理 11.2.1 ADC原理 我们知道&#xff0c;自然界中有非常多的模拟信号&#xff0c;比如上一节提到的光照强度&#xff0c;还有其他的例如温…

Python的动态类型系统是什么

Python的动态类型系统是指Python语言在运行时确定变量类型的一种特性&#xff0c;而非在编译时。以下是关于Python动态类型系统的详细解释&#xff1a; 动态类型的定义&#xff1a; 动态类型指的是在运行时&#xff0c;变量的数据类型可以根据其赋值的内容动态确定。这与静态类…

RTOS笔记--任务通知+软件定时器

任务通知的本质 对于之前使用过的几种互斥操作方式队列&#xff0c;互斥量&#xff0c;信号量&#xff0c;事件组&#xff0c;他们都是黑箱操作&#xff0c;对于写入和读取的任务来说并不知道对方是哪个任务&#xff0c;只是操作环形缓冲区和链表。 而任务通知的方式就是通知方…

LeetCode-day07-312. 戳气球

LeetCode-day07-312. 戳气球 题目描述示例示例1&#xff1a;示例2&#xff1a; 思路代码 题目描述 有 n 个气球&#xff0c;编号为 0 到 n - 1&#xff0c;每个气球上都标有一个数字&#xff0c;这些数字存在数组 nums 中。 现在要求你戳破所有的气球。戳破第 i 个气球&#…

【CS.AL】算法复杂度分析 —— 时间复杂度详解

文章目录 1 概述2 时间复杂度的详细分析2.1 常数时间复杂度&#xff08;O(1&#xff09;&#xff09;2.2 对数时间复杂度&#xff08;O(log n)&#xff09;2.3 线性时间复杂度&#xff08;O(n)&#xff09;2.4 线性对数时间复杂度&#xff08;O(n log n)&#xff09;2.5 平方时…

程序的基本结构、cout语句(c++语言)

一、如何下载Dev C 登录网站&#xff1a;ht.51goc.com 二、安装Dev C 一、启动Dev C 双击桌面的图标 二、新建一个程序 三、复制一个程序 请你复制以下代码到“程序编辑区” #include<bits/stdc.h> using namespace std; int main() { cout<<"Hell…

详解MySQL完整性约束

完整性约束条件是对字段进行限制&#xff0c;要求用户对该属性进行的操作符合特定的要求。如果不满足完整性约束条件&#xff0c;数据库系统将不再执行用户的操作。MySQL 完整性约束常用的操作有六大操作&#xff1a; 主键约束唯一约束 unique非空 not null默认值约束(default…

计网仿真综合实验 实验十二

实验十二 综合网络实验 实验过程 IP配置说明参考连线配置OSPF使公司内部联通 路由器R1的OSPF配置路由器R2的OSPF配置路由器R3的OSPF配置R1、R2、R3的相关解释路由器R4的OSPF配置路由器R5的OSPF配置路由器R6的OSPF配置R4、R5、R6解释: 路由器R2的RIP配置路由器R7的RIP配置 总结 …

MicroPython esp32 连接wifi 配网

整体流程&#xff1a; 1&#xff09;开启STA 和 AP 模式 2&#xff09;扫描周围wifi 保存在 变量 wifi_list&#xff08;后面要用到&#xff09; 3) 尝试STA模式连接Wifi&#xff0c;并查寻状态。 4) 如果STA 无法连网&#xff0c;就用AP模式&#xff0c;创建热点。 5&a…

Radash 轻量级的函数工具集

Radash 是一个现代的 JavaScript 实用程序库&#xff0c;旨在提供高效、轻量级的函数工具集&#xff0c;类似于 Lodash&#xff0c;但更加现代化和模块化。Radash 通过提供一系列常用的工具函数&#xff0c;帮助开发者更轻松地处理数组、对象、函数等操作。 以下是一些 Radash…

Python中的列表(List)和元组(Tuple)的区别

在Python中&#xff0c;列表&#xff08;List&#xff09;和元组&#xff08;Tuple&#xff09;都是常用的数据结构&#xff0c;用于存储一系列的元素。然而&#xff0c;它们在多个方面存在着显著的区别。下面将从技术难点、面试官关注点、回答吸引力和代码举例四个方面来详细解…

【lesson1】第三方库(jsoncpp,bundle, httplib)的介绍和使用

文章目录 jsoncpp库json 认识jsoncpp 认识jsoncpp 实现序列化jsoncpp 实现反序列化 bundle库bundle库实现文件压缩bundle库实现文件解压缩 httplib 库httplib 库搭建简单服务器httplib库搭建简单客户端 jsoncpp库 json 认识 json 是一种数据交换格式&#xff0c;采用完全独立…

【Vscode配置java环境并配置stringboot】

1.VSCODE配置JAVA环境 参考这篇文章配置JAVA环境&#xff1a;连接 java版本&#xff0c;我是win11系统,我下载的JAVA安装版本是下面&#xff0c;是最新版的&#xff1a; 配置环境&#xff1a;步骤很简单&#xff0c;就是向系统环境变量中添加路径&#xff0c;参考上面文章中的…

(20)DAC接口--->(005)FPGA实现AD5601接口(五)

(005)FPGA实现AD5601接口(五) 1 目录 (a)FPGA简介 (b)IC简介 (c)Verilog简介 (d)FPGA实现AD5601接口(五) (e)结束 1 FPGA简介 (a)FPGA(Field Programmable Gate Array)是在PAL (可编程阵列逻辑)、GAL(通用阵列逻辑)等可编程器件的基础上进一步发展…

基于学习模型的可学习小波变换方法(Pytorch)

首先以图像编码为例进行说明。 图像编码是一个复杂的系统&#xff0c;通常包含多个模块&#xff0c;其中变换模块具有重要作用。小波变换在图像编码领域得到了广泛的应用&#xff0c;例如著名的JPEG 2000就是一种小波图像编码方法。然而&#xff0c;现阶段的小波图像编码方法与…

htb-window-1-legacy-smb

nmap smb-vuln-ms08-067 py文件测试失败 msf 漏洞定位 反弹 获取flag

【Oracle篇】rman全库异机恢复:从单机环境到RAC测试环境的转移(第五篇,总共八篇)

&#x1f4ab;《博主介绍》&#xff1a;✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ &#x1f4ab;《擅长领域》&#xff1a;✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux&#xff0c;也在扩展大数据方向的知识面✌️…

一文学会Spring 实现事务,事务的隔离级别以及事务的传播机制

目录 一.Spring (Spring Boot) 实现事务 1.通过代码的方式手动实现事务 (手动档的车) 2.通过注解的方式实现声明式事务 (自动挡的车) 二.事务的4大特性(ACID) 三.事务的隔离级别 ①Mysql的事务隔离级别: ②Spring的事务隔离级别: 四.事务的传播机制 ①事务传播机制的概…

验证码案例

目录 前言 一、Hutool工具介绍 1.1 Maven 1.2 介绍 1.3 实现类 二、验证码案例 2.1 需求 2.2 约定前后端交互接口 2.2.1 需求分析 2.2.2 接口定义 2.3 后端生成验证码 2.4 前端接收验证码图片 2.5 后端校验验证码 2.6 前端校验验证码 2.7 后端完整代码 前言…