【Linux】调试工具gdb的认识和使用指令介绍(图文详解)

目录

1、debug和release的知识

2、gdb的使用和常用指令介绍:

(1)、windows下调试的功能:

(2)、进入和退出:

(3)、调试过程中的相关指令:

3、调试究竟是在干什么?


 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家

点击跳转到网站

1、debug和release的知识

(1)、debug形成的可执行程序会给我们加上调试信息,这部分调试信息也会占用空间,但我们用户是不需要这些调试信息的,用户需要更快的下载和安装,所以debug模式一般是方便开发人员进行调试,而用户得到的应该是release版本。

(2)、release形成的可执行程序不会给我们调试信息,占用内存较小,所以也是测试人员和用户得到的版本。

(3)、gcc/g++编译时默认是release模式,所以直接编译来的文件是不能用于调试的。

gcc的默认行为:

(1)默认是动态链接的

(2)默认是release模式发布的

(4)、如何让gdb以debug模式发布?

在编译的时候,使用 -g 命令:

然后使用make,生成可执行文件mybin后,使用指令:

 gdb mybin

这样就进入了调试模式。如果不加-g选项,生成的可执行文件是release模式,是进不去调试模式的。

(5)、我们分别在debug和release模式下生成可执行文件,发现如下:

会发现debug模式下的可执行文件的文件大小会比release模式下的要大,大的那部分就是增加的调试信息。

2、gdb的使用和常用指令介绍:

(1)、windows下调试的功能:

1、运行起来才能调试;

2、调试的时候需要看到代码;

3、打断点功能;

4、可以局部调试;

5、可以看到相关局部变了的内容和地址;

6、可以查看调用堆栈

7、逐语句和逐过程调试;

linux所做的就是需要平替windows里面的功能

(2)、进入和退出:

1、进入:输入指令gdb或者gdb+可执行文件名,即可进入调试功能;

gdb mybin-2

2、退出:输入指令 quit

quit

(3)、调试过程中的相关指令:

(1)、l +行号:显示指定行号之后的代码:

注意:gdb会自动记录最近的一条指令,所以上次输入指令后,直接回车可以继续执行:

(2)、b+行号/函数名/file:行号 :对指定位置打断点:

(3)、info  b :查看我们所打的断点:

(4)、d+断点编号:删除该断点。

注意,这里的断点编号是我们使用info b指令后,显示的内容的Num列: 

(5)、disable/enable + 断点编号:禁用 / 开启 该断点;

(6)、n:逐过程调试(相当于F10)

(7)、s:逐语句调试(相当于F11)

(8)、run + [参数]:开始调试,若没有断点,则全部运行完,若有断点,则运行到断点处,然后就可以进行逐语句和逐过程调试。

若该程序是需要参数输入的,此时就可以在run后面增加参数,如 run 9,则是把参数9输入到程序。

(9)、p:显示变量的内容和地址:

(10)、display 变量名/取地址变量:每调试一步,自动显示改变量的内容/地址:

(11)、undisplay + 编号:取消第(10)步:

注意,这里的编号是显示列表中的编号:

(12)、c:从一个断点运行到下一个断点(范围查找)

(13)、finish:将一个函数运行结束,然后停下来(范围查找一个函数)

(14)、until:在一个范围内,直接运行到指定行(范围查找)

(15)、bt:查看调用堆栈

(16)、set var name=value:修改name变量的值,进行分支(如if判断)测试,不会改变实际变量的值。

3、调试究竟是在干什么?

首先要知道,想调试一个程序,首先需要搞懂它的代码逻辑,不然是很困难的;

(1)、找到问题(查找、范围查找局部逐行查找);

(2)、解决问题(配合上下文代码);

评论 34
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

成工小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值