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.c
	gcc -o $@ $^ -std=c99
.PHONY:clean
clean:
	rm -f mytest mytest_g

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

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

PHONY:all

all:mytest mytest_g

mytest:test.c
	gcc -o $@ $^ -std=c99
mytest_g:test.c
	gcc -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下编写代码显得十分方便。 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

先进封装技术的一些优缺点探讨

半导体封装技术是半导体制造过程中的关键环节&#xff0c;它不仅保护了芯片免受物理损伤&#xff0c;还提供了电气连接和散热功能。随着技术的发展&#xff0c;出现了多种先进的封装技术&#xff0c;每种技术都有其特定的应用场景和优缺点。 --> 1. 传统封装技术 【优点】&…

微服务之基本介绍

一、微服务架构介绍 1、微服务架构演变过程 单体应用架构->垂直应用架构一>分布式架构一>SOA架构-->微服务架构 ① 单体应用架构 互联网早期&#xff0c; 一般的网站应用流量较小&#xff0c;只需一个应用&#xff0c;将所有功能代码都部署在一起就可以&#x…

嵌入式仪器模块:波形发生器模块(嵌入式)

• 16 位分辨率 • 125 MHz 刷新率 • 支持生成 FSK/ASK 信号 应用场景 • 生成任意标准波形或用户自定义波形 • 在特殊协议通信中模拟某个波形 • 无线充电&#xff08;信号调制&#xff09; 道114输出阻抗Low-ZLow-ZLow-Z输出范围 5 V 5 V 6 V耦合DCDCDC带宽4 MHz10 M…

【小沐学Python】Python实现Web服务器(CentOS下打包Flask)

文章目录 1、简介2、下载Python3、编译Python4、安装PyInstaller5、打包PyInstaller6、相关问题6.1 ImportError: urllib3 v2 only supports OpenSSL 1.1.1, currently the ssl module is compiled with OpenSSL 1.0.2k-fips 26 Jan 2017. See: https://github.com/urllib3/url…

AXI Quad SPI IP核中的STARTUPEn原语参数

启动STARTUPEn Primitive &#xff08;原语&#xff09;参数在 FPGA的主 SPI模式下非常有用。当你启用这个参数时&#xff0c;对于 7 系列设备&#xff0c;STARTUPE2 原语会被包含在设计中&#xff1b;而对于 UltraScale™ 设备&#xff0c;则是 STARTUPE3 原语。这些原语在 FP…

基于NodeJs 的Vue安装和创建项目

基于NodeJs 的Vue安装和创建项目 一、Node.js的下载与安装 下载地址&#xff1a; https://nodejs.org/en/download/prebuilt-installer 安装完之后&#xff0c;启动 cmd命令行&#xff0c;验证 Node.js 是否安装成功 二、配置npm的全局模块的存放路径以及缓存的路径 注&…

大模型应用工程化过程

近年来&#xff0c;以人工智能为代表的新一代信息技术加速应用&#xff0c;特 别是基于大模型、大数据、大算力的 ChatGPT 的发布&#xff0c;标志着人 工智能技术取得里程碑式突破&#xff0c;推动科技创新进入新阶段。随着 大模型技术的迅猛发展和场景价值的不断涌现&#xf…

HTML-CSS练习例子

HTML CSS 练习 https://icodethis.com 作为前端练习生。不敲代码只看&#xff0c;入门是很慢的&#xff0c;所以直接实战是学习前端最快的途径之一。 这个网站练习HTML CSS的&#xff0c;可以打开了解一下&#xff0c;可以每天打卡&#xff0c;例子简单&#xff0c;循序渐进&…

每日5题Day19 - LeetCode 91 - 95

每一步向前都是向自己的梦想更近一步&#xff0c;坚持不懈&#xff0c;勇往直前&#xff01; 第一题&#xff1a;91. 解码方法 - 力扣&#xff08;LeetCode&#xff09; class Solution {public int numDecodings(String s) {int n s.length();//注意我们dp的范围是n1int[] d…

AtCoder Beginner Contest 356 G. Freestyle(凸包+二分)

题目 思路来源 quality代码 题解 对n个泳姿点(ai,bi)建凸包&#xff0c;实际上是一个上凸壳&#xff0c; 对于询问(ci,di)来说&#xff0c;抽象画一下这个图&#xff0c;箭头方向表示询问向量 按x轴排增序&#xff0c;并且使得后面的y不小于前面的y&#xff0c;因为总可以多…

ThreadCache线程缓存

一.ThreadCache整体结构 1.基本结构 定长内存池利用一个自由链表管理释放回来的固定大小的内存obj。 ThreadCache需要支持申请和释放不同大小的内存块&#xff0c;因此需要多个自由链表来管理释放回来的内存块.即ThreadCache实际上一个哈希桶结构&#xff0c;每个桶中存放的都…

LLM的基础模型8:深入注意力机制

大模型技术论文不断&#xff0c;每个月总会新增上千篇。本专栏精选论文重点解读&#xff0c;主题还是围绕着行业实践和工程量产。若在某个环节出现卡点&#xff0c;可以回到大模型必备腔调或者LLM背后的基础模型新阅读。而最新科技&#xff08;Mamba,xLSTM,KAN&#xff09;则提…

SpringBoot之静态资源

默认静态资源路径 classpath:/META-INF/resources/classpath:/resources/classpath:/static/classpath:/public/ 静态资源路径下的文件&#xff0c;可以通过根目录访问 resources 文件夹的文件如下图所示&#xff1a; 启动项目&#xff0c;分别访问以下路径&#xff1a; ht…

STM32 proteus + STM32Cubemx仿真教程(第一课LED教程)

文章目录 前言一、STM32点亮LED灯的原理1.1GPIO是什么1.2点亮LED灯的原理 二、STM32Cubemx创建工程三、proteus仿真电路图四、程序代码编写1.LED灯操作函数介绍HAL_GPIO_WritePin函数原型参数说明示例代码 HAL_GPIO_TogglePin函数原型参数说明示例代码 2.代码编写3.烧写程序 总…

微服务开发与实战Day04 - 网关路由和配置

一、网关路由 网关&#xff1a;就是网络的关口&#xff0c;负责请求的路由、转发、身份校验。 在SpringCloud中网关的实现包括两种&#xff1a; 1. 快速入门 Spring Cloud Gateway 步骤&#xff1a; ①新建hm-gateway模块 ②引入依赖pom.xml(hm-gateway) <?xml version…

在VSCode中安装python

引言 Python 是一种广泛使用的高级编程语言&#xff0c;因其易学、易用、强大而受到欢迎。它由 Guido van Rossum 于 1991 年首次发布&#xff0c;并以简洁的语法和丰富的库生态系统而著称。 以下是 Python 的一些关键特点和优势&#xff1a; 关键特点 易于学习和使用&#x…

vue28:组件化开发和根组件

简单写个点击事件 <template> <div class"app"><div class"box" click"fn"></div></div> </template><script> export default {//导出当前组件的配置项//里面可以提供 data methods computed wat…

解决PyQt5中柱状图上显示的数值为带e的科学计数法

PyQt5生成柱状图的代码参考&#xff1a;PyQt5 QtChart-柱状图 参照上述文章&#xff0c;生成柱状图后&#xff0c;数值较大或较小情况下会导致柱状图上显示数值为带e的科学计数法&#xff0c;这样会影响数值的识别&#xff1a; 经过分析QBarSet方法得到解决方法&#xff1a;需…

基于stm32最小版的超声波测距模块

目录 一、模块准备 二、HC-SR04模块原理解释 三、程序完整代码 四、烧录结果 总结 一、模块准备 STM32F103C8T6 HC-SR04 ST-Link&#xff08;其他烧录器也可以&#xff09; 0.96寸OLED屏幕&#xff08;非必须&#xff0c;仅供显示测距结果&#xff0c;可以使用串口助手代替…