【Linux】调试器-gdb使用(指令调试常用大全,实用性高!!)

本文详细介绍了Windows系统下的调试方法,包括调试的概念、基本步骤,以及使用Linux调试器GDB的命令如设置断点、查看变量值、调用堆栈等,旨在帮助开发者提高代码调试效率。

目录

关于windows系统的调试

1.前言关于程序bug

 2. 调试是什么?有多重要?

2.1调试是什么 

2.2 调试的基本步骤

2.3 Debug和Release的介绍

 3.linux调试器--gdb的下载

3.1 如何使gcc生成release版本的代码

4.调试指令 

4.1 调试开始

4.2指令 l 显示调试代码

4.1.1 l 函数名  查看某个函数的代码

4.1.2 l 文件名:行号 显示某个文件的第几行

4.2 r/run 程序运行起来 

 4.3 打断点 b/break+行号

4.3.1 b/break +函数名

​编辑4.3.2 多文件中可以使用 b/break+文件名:行号

4.4 info  可以查看当前所有的断点

4.5 d+断点编号  删掉断点

4.5 不删除断点  使能断点---禁用和启用断点  

4.5.1 disable + 断点序号:禁用断点  断点Enb变为n

​编辑

4.5.2  enable +断点序号 :开启断点:

4.5.6 c 直接从一个断点运行到下一个断点 

5.逐语句调试/逐过程调试

5.1 n/next 回车 逐过程

5.2 逐语句 step/s 回车 逐语句进入函数

6 查看变量的值和地址

6.1 p 变量名 看变量的值

6.2 p &变量名 看变量的地址 

 6.3 display 变量名 常显示变量的值

6.4 display &变量名  常显示变量的地址 

6.5  undisplay  编号 取消常显示

 7.调用堆栈

7.1 bt调用堆栈  查看自己是否进入了函数

7.2 finish 从当前进入的函数开始执行到这个函数结束结束 

7.3until +行数 

8 改变变量值:进行局部测试

 9.结语


关于windows系统的调试

CSDN

1.前言关于程序bug

那我们就不得不提及那个开拓时代,和那段在编程世界的神话;

与“阿兰·图灵、史蒂夫·乔布斯、比尔·盖茨”等一同入选“IT界十大最有远见的人才”的唯一一位女性——格蕾丝·赫柏

 大家可以点击链接了解她的故事,现在我们来看一下她是如何发现并命名世界上第一个“BUG”的。

赫柏从海军学校毕业后,因为出色的数学背景,被分配到美国船舶局位于哈佛大学的战时科研中心。彼时,军方正在开展世界第一台大型数字计算机的研究项目——马克一号。赫柏被任命为著名计算机专家霍德艾肯博士的助手,成为这个项目的第三名程序员。在这儿,赫柏开启了自己程序员的生涯。她的主要任务,就是为马克一号,还有接下来的马克二号,马克三号编写程序与软件。

 一天,计算机发生故障,赫柏经过排查,在计算机的继电器触电里,找到了一只被夹扁的小飞蛾,这只小虫子卡住了机器的运行,赫柏顺手将飞蛾夹在工作笔记里,并诙谐的把程序故障称为“bug”。这就是我们今天最爱说的“bug”的由来。它的意思,和原身一致,真就是“一只臭虫”这一称呼后来演变成表达缺陷漏洞的计算机专业术语,人们习惯地把排除程序故障叫做“debug”(除虫)。

赫柏发现第一个“bug”后的手稿:

这便是BUG的由来 

 2. 调试是什么?有多重要?

所有发生的事情都一定有迹可循,如果问心无愧,就不需要掩盖也就没有迹象了,如果问心有愧, 就必然需要掩盖,那就一定会有迹象,迹象越多就越容易顺藤而上,这就是推理的途径。 顺着这条途径顺流而下就是犯罪,逆流而上,就是真相。 一名优秀的程序员是一名出色的侦探。 每一次调试都是尝试破案的过程。

我们写代码都是简单粗暴:

所以,更要知道调试的重要性和如何调试代码。而不是能跑就行,特别是在学习阶段。 

2.1调试是什么 

调试(英语:Debugging / Debug),又称除错,是发现和减少计算机程序或电子仪器设备中程序 错误的一个过程。人们习惯地把排除程序故障叫做“debug”(除虫)。

2.2 调试的基本步骤

①发现程序错误的存在

②以隔离、消除等方式对错误进行定位

③确定错误产生的原因

④提出纠正错误的解决办法

⑤对程序错误予以改正,重新测试

2.3 Debug和Release的介绍

Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。形成的文件体积大。

 Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优 的,去掉了调试信息debug以便用户很好地使用。

项目立项 -》搭建团队&&排期计划-》环境预准备,流程说明

 ①debug版本支持调试:

②relese版本不支持调试

 

程序感觉一步跳完。

 3.linux调试器--gdb的下载

注意在root账户下或者普通用户sudo执行指令

3.1 如何使gcc生成release版本的代码

gcc默认动态链接,默认生成的是release版本的,这个版本不支持调试:

那么要生成debug版本的二进制程序,需要在gcc后加上-g指令

这样生成的二进制文件就可以进行调试:

4.调试指令 

编写代码如下,方便调试:

4.1 调试开始

指令:gdb 生成的可执行的二进制文件名

进入调试状态:

4.2指令 l 显示调试代码

l+行号:显示指定行之后的代码(gdb自动记录最近一条指令)

4.1.1 l 函数名  查看某个函数的代码

4.1.2 l 文件名:行号 显示某个文件的第几行

4.2 r/run 程序运行起来 

程序要运行起来才可以调试

 

 4.3 打断点 b/break+行号

4.3.1 b/break +函数名

4.3.2 多文件中可以使用 b/break+文件名:行号

4.4 info  可以查看当前所有的断点

4.5 d+断点编号  删掉断点

4.5 不删除断点  使能断点---禁用和启用断点  

Enb 是y断点就是打开的

4.5.1 disable + 断点序号:禁用断点  断点Enb变为n

4.5.2  enable +断点序号 :开启断点:

4.5.6 c 直接从一个断点运行到下一个断点 

5.逐语句调试/逐过程调试

函数是由语句构成的 ,逐语句按键没有函数概念只有语句概念所以可以进入函数

逐过程是每一行看做一个整体,包括函数都是一个整体,从上到下执行。

5.1 n/next 回车 逐过程

5.2 逐语句 step/s 回车 逐语句进入函数

6 查看变量的值和地址

6.1 p 变量名 看变量的值

6.2 p &变量名 看变量的地址 

 6.3 display 变量名 常显示变量的值

6.4 display &变量名  常显示变量的地址 

6.5  undisplay  编号 取消常显示

 7.调用堆栈

7.1 bt调用堆栈  查看自己是否进入了函数

7.2 finish 从当前进入的函数开始执行到这个函数结束结束 

这里就直接到了14行

7.3until +行数 

for循环等可以直接走完,一个范围内运行到指定行

死循环 跑不出来

8 改变变量值:进行局部测试

set var 变量名 = 值

 9.结语

以上就是常用的调试指令,大家可以配合windows下的调试对比使用。创作不易,大家如果觉得还可以的话,欢迎大家三连,有问题的地方欢迎大家指正,一起交流学习,一起成长,我是Nicn,正在c++方向前行的奋斗者,数据结构内容持续更新中,感谢大家的关注与喜欢。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值