![Linux嵌入式系统开发从小白到大牛](https://wfqqreader-1252317822.image.myqcloud.com/cover/667/41398667/b_41398667.jpg)
5.3 gdb调试工具的使用方法
gdb调试工具有什么作用呢?习惯在Windows下开发的读者感觉不到调试工具的存在,比如使用Visual Studio做项目开发,需要调试时,使用快捷键F11就能进入程序的Debug模式。但在Linux系统中由于没有强大的图像调试工具,就需要借助gdb调试工具。gdb是一个纯命令行的调试工具,也是由GUN组织开发和维护的。在讲解gdb调试工具前,需要确保Linux系统已经安装了gdb调试工具,可以使用gdb-v命令来查看,如图5-13所示。
![](https://epubservercos.yuewen.com/DEDA9F/21570843408785506/epubprivate/OEBPS/Images/106_03.jpg?sign=1739689052-j1TPEfNM25QXmsRGq16RxU8o5VlxE1Zf-0-e307e183d2445f8d521f0198f47ac482)
图5-13 查看gdb版本信息
这里主要介绍如何在Linux系统下编写一个C语言的程序文件,然后使用gdb调试工具进行调试。需要强调是,使用gdb调试工具的前提是源文件没有语法、语义的错误,即源文件能够通过gcc编译器的编译。因为基本上所有的Debug工具都是用来调试逻辑功能,而不是用来检查代码完整性的。在演示调试过程之前,先需要了解gdb常用的调试命令,详见表5-2。
表5-2 gdb调试工具常用命令
![](https://epubservercos.yuewen.com/DEDA9F/21570843408785506/epubprivate/OEBPS/Images/107_01.jpg?sign=1739689052-hIC42554NSum2thrwjgHUvJtPYZt8Ege-0-9972838eef196a6ec86e7278fb482617)
下面就来演示如何将一个源程序文件通过gdb调试工具,完成逻辑功能的调试。首先介绍一下test1.c程序文件的功能。test1.c文件的功能就是在Linux系统终端下比较输入的两个整数的大小,具体的函数实现是先声明一个能够返回最大值的函数Max,然后在主函数中调用它,具体的函数代码如图5-14所示。下面开始演示过程。
![](https://epubservercos.yuewen.com/DEDA9F/21570843408785506/epubprivate/OEBPS/Images/107_02.jpg?sign=1739689052-yyVLzULsiAMBnP37zf8wFwEpRpvRuHAG-0-359d8f7d08165604a79ce68b75bfe5b2)
图5-14 test1.c文件代码
Step 1 由于gcc编译源程序的时候,编译后的可执行文件不会包含源程序代码,如果想要编译后的程序可以被调试,编译的时候要加-g的参数,例如gcc-g-o test1 test1.c,接着使用gdb test1命令就进入gdb的调试模式了,如图5-15所示。
Step 2 具体的调试命令参见表5-2 gdb,下面演示run命令,如图5-16所示。
![](https://epubservercos.yuewen.com/DEDA9F/21570843408785506/epubprivate/OEBPS/Images/108_01.jpg?sign=1739689052-SwNOtKTbOvA0PqELujEHwtHcZrPcxKCQ-0-626c9c8a1006d4089aedfc674dba0e27)
图5-15 进入gdb调试模式
![](https://epubservercos.yuewen.com/DEDA9F/21570843408785506/epubprivate/OEBPS/Images/108_02.jpg?sign=1739689052-i3Mtf24ilPs24v5HWnhTBbNLAnLGQq9r-0-7d9109717b65e19c59a6e06db029f6d3)
图5-16 gdb执行run命令
Step 3 设置断点操作,如图5-17所示。
![](https://epubservercos.yuewen.com/DEDA9F/21570843408785506/epubprivate/OEBPS/Images/108_03.jpg?sign=1739689052-ouK20SEnpBPt4XvyRZ6qjB54ig6iznuQ-0-5713bbb2c7a37851a479d017119b57c4)
图5-17 gdb执行break命令
Step 4 执行当前语句操作,如图5-18所示。
![](https://epubservercos.yuewen.com/DEDA9F/21570843408785506/epubprivate/OEBPS/Images/108_04.jpg?sign=1739689052-rRpGefnstaeRSwfkJIu9tQdhA9mInPau-0-0c738edd0d0ac57aab77dc18fb3c65d4)
图5-18 执行step命令
Step 5 设置继续程序的运行操作,如图5-19所示。
![](https://epubservercos.yuewen.com/DEDA9F/21570843408785506/epubprivate/OEBPS/Images/108_05.jpg?sign=1739689052-7TvvQmlXiuGsTHr2xmXQTm2a4e215hp0-0-1269547c40afa36f4ead0944d1c996c5)
图5-19 执行continue命令
Step 6 设置变量和查看变量操作,如图5-20所示。
![](https://epubservercos.yuewen.com/DEDA9F/21570843408785506/epubprivate/OEBPS/Images/109_01.jpg?sign=1739689052-IVnDWMNiXHKOat01rTO70oj2mJuDBXVK-0-e7aeeb52f7b5191fd5e47ceafdaadf45)
图5-20 执行p/set var命令
Step 7 执行删除断点以及退出gdb调试操作,如图5-21所示。
![](https://epubservercos.yuewen.com/DEDA9F/21570843408785506/epubprivate/OEBPS/Images/109_02.jpg?sign=1739689052-jqLfI6SrUETRhqP2JHnsdd8alLZPITmH-0-3a59da67f662a27e850a52d08a08ec12)
图5-21 执行clear/quit命令
小白成长之路:gdb调试工具的作用
我们为什么要讲解gdb调试工具呢?第一,gdb调试工具能够帮助优化程序的逻辑功能,解决实际问题;第二,通过使用gdb调试工具能够理解Windows平台下IDE软件调试的机理;第三,在编译Linux内核时需要gdb调试工具的帮助。