【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)、解决问题(配合上下文代码);